String s = new String("5");
System.out.println(1 + 10 + s + 10 + 5);
выход следующей функции 115105 как?Почему целое число добавляется со строкой в System.out.println? в java
String s = new String("5");
System.out.println(1 + 10 + s + 10 + 5);
выход следующей функции 115105 как?Почему целое число добавляется со строкой в System.out.println? в java
«+» левоассоциативно так
1 + 10 => 11(int)
11 + s => "115"(String)
"115" + 10 => "11510"(String) 10 is converted to String
"11510" + 5 = "115105"(String) 5 is converted to String
Java отличает целые числа как строку, когда вы добавляете строку в дополнение, она становится конкатенацией. Попробуйте
import java.io.*;
import java.util.*;
import java.lang.*;
public class mainactivity {
public static void main(String a[]) {
String s = new String("5");
System.out.println((1 + 10) + s + (10 + 5));
}
}
Это Выведите 11515.
Я получил это благодаря bro – Guru
Это не даст тот же результат из-за круглой скобки, содержащей «10 + 5». –
Ваш код эффективно функционирует как целое число суммирования до тех пор, как это возможно, потому что процесс оценки идет от слева направо. Как только String встречается, функция переключается на конкатенацию.
1 + 10 + "5" + 10 + 5
= (1 + 10) + "5" + 10 + 5
= 11 + "5" + 10 + 5
= 115105
String s = new String("5");
System.out.println(1 + 10 + s + 10 + 5);
Поскольку выражения вычисляются слева право разместить свой код такой же, как
System.out.println((((1 + 10) + "5") + 10) + 5);
Так первая (1 + 10)
оценивается и так как это просто целое дополнение вы получаете 11 так что ваш код становится
System.out.println(((11 + "5") + 10) + 5);
Сейчас (11 + "5")
оценивается и с тех пор одним из аргументов является String, он конкатенируется, а результатом будет также String. Таким образом, 11
+ "5"
становится "11"+"5"
, который дает нам строку "115"
.
Так после этого наш код такой же, как
System.out.println(("115" + 10) + 5);
и снова в ("115" + 10)
один из аргументов является строка, поэтому мы получаем "115"+"10"
, что дает нам еще одну строку "11510"
.
Итак, наконец, мы получаем до точки, где мы имеем
System.out.println("11510" + 5);
, который так же, как
System.out.println("115105");
(1 + 10)
и 10
и 5
рассматриваются как три строки в коде
Что вы ожидали? – blagae
1105105 - выход, ожидающий! – Guru
@Guru "1105105 - это результат, ожидающий" почему? – Pshemo