Я также нашел это интересным. Я недавно не работал слишком много в java, но я узнал немного информации, которая может быть полезной, играя с ней.
Я думаю, что это связано с автоматическим типом, который делает java.
System.out.println («1» + 2 + 3);
blockquote>Печатает 123, как вы сказали. Поскольку «1» исполняется как строка, Java предполагает, что первая строка была строкой, последующие будут строкой для конкатенации, если не указано иное
. Хотя этот результат делает печать 15, когда вы определяете тип
System.out.println ("1" + (int) (2 + 3));
blockquote>В этом случае он может завершить операцию перед конкатенацией.
Итак, я думаю, что java предполагает, что первая из них является строкой, остальные останутся строками и конкатенируют их.
EDIT: вы можете увидеть некоторую информацию об автоматическом type-conversion на веб-сайте oracle здесь