Потому что оператор «+», который вы написали, означает «string concatenate», а не «add», потому что он найден с левым контекстом, являющимся строковым значением. В этом случае вы получаете бесплатное принуждение к правильному значению через неявный ToString.
Вы, вероятно, получить то, что вы хотели, написав
System.out.println("abc"+(3+2))
«3» будет найден, не левый контекст, так что это просто целое число; следующий «+» находится с целым левым контекстом, поэтому он интерпретируется как действительный оператор добавления, поэтому (3 + 2) дает 5. Этот результат найден с левым контекстом «+», поэтому он принуждается к строке и конкатенированы для производства «abc5».
Dup: http://stackoverflow.com/questions/11008538/difference-between-int-and-int-received-by-parseint-in-java/11008551#11008551 –
Этот вопрос беспрецедентен! –
Он добавляет слева направо. Первый случай («abc» +3) +2, второй - (3 + 2) + «abc» –