2015-06-24 2 views

ответ

4

«+» левоассоциативно так

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 
-1

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.

+0

Я получил это благодаря bro – Guru

+0

Это не даст тот же результат из-за круглой скобки, содержащей «10 + 5». –

1

Ваш код эффективно функционирует как целое число суммирования до тех пор, как это возможно, потому что процесс оценки идет от слева направо. Как только String встречается, функция переключается на конкатенацию.

1 + 10 + "5" + 10 + 5 
= (1 + 10) + "5" + 10 + 5 
= 11 + "5" + 10 + 5 
= 115105 
0
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"); 
0

(1 + 10) и 10 и 5 рассматриваются как три строки в коде