Результат следующего кода объявляется как «6» при попытке выполнить это.Назначение Java Compound Assignment в выражениях
Когда я пытаюсь это понять, выражение «k + = 3 + ++ k; должно быть оценено как k = k + (3 + ++ k), но в этом случае выход должен иметь 7. Похоже, что он был оценен как k = k + 3 + ++ k, в результате чего было получено 6.
Не могли бы вы объяснить, почему выражение было оценено как «k + 3 + ++ k» вместо "k + (3 + ++ k); ?
public class TestClass {
public static int m1(int i){
return ++i;
}
public static void main(String[] args) {
int k = m1(args.length);
k += 3 + ++k;
System.out.println(k);
}
}
Все это определено в [раздел 15.7 Спецификации языка Java] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.7). Соответствующий раздел довольно утомительно читать (и, следовательно, утомительно объяснять здесь), но это нормально, потому что на практике никогда не нужно писать такой код;) –
@OliCharlesworth - Спасибо, что поделились спецификациями. После прохождения примера «Пример 15.26.2-2. Значение левой стороны составного присвоения сохраняется до оценки правой стороны» на странице «Технические характеристики» я могу понять, как оценивалось выражение. – sunsin1985