Это не имеет ничего общего с +=
. Это связано с тем, как работает +
.
Если любой из операндов +
имеет тип String
, +
является оператором конкатенации строк; в противном случае это числовое дополнение.
temp += (char) 90 + 10;
совпадает с
temp += ((char) 90 + 10);
Таким образом, сначала вычисляется скобка, а затем применяется +=
. Здесь ни (char) 90
, ни 10
не являются String
с, поэтому +
является числовым сложением.
Чтобы сделать числовое сложение, оба операнда должны быть совместимы - это называется двоичное числовое продвижение . Если операндами являются char
и int
, char
расширяется до int
.
Следовательно, (char) 90
немедленно расширяется до 90
; затем можно добавить два int
- получая 100
- и затем добавить к строке temp
через +=
.
С другой стороны
temp += "" + (char) 90 + 10;
совпадает с
temp += (("" + (char) 90) + 10);
Итак, сначала оцениваются самые внутренние скобки.
Поскольку ""
- это String
, "" + (char) 90
- это конкатенация строк, в результате чего получается значение "Z"
. Это тоже String
; поэтому "Z" + 10
также является конкатенацией строк, в результате чего "Z10"
.