Обновление ++
делает на number
в правом операнде присваивания переписываются назначая результат общего выражения назад до number
.
Это покрытие JLS§15.26.1. Вот что происходит в этом выражении присваивания:
- Левая рука определяется как переменная
- Правая рука выражения присваивания вычисляется:
- Значение
80
читается от number
number
увеличивается до 81 (это не имеет значения)
math.sqrt
вызывается со значением 80
читать Бове
- Результат
math.sqrt
преобразуется в int
- Результат от # 2 выше (
8
) хранится в number
Обратите внимание на порядок этапов 2.1 и 2.2 выше. Это потому, что вы использовали постфикс number++
. Порядок будет отменен (и результат будет другим), если вы использовали ++number
.
++
number
с правой стороны не оказывает никакого влияния на результат выражения. (В Java. В некоторых других языках это считается Undefined Behavior, позволяющим компилятору делать все, что захочет.)
В частности (поскольку вы упомянули, что хотите получить значение 9
), ++
не применяется после того, как результат присвоения сохранен в number
. Он применяется сразу после считывания значения number
при передаче его в math.sqrt
.
'8.944 ...' становится '8' при нажатии на' int'. Это не имеет никакого отношения к фактической печати с помощью 'println()'. Вы сохраняете это значение в переменной 'number' и ** then **, увеличивая его. Инкремент никогда не сохраняется в 'number'. – Gendarme
Привет, Его Джо, Спасибо, что помогли мне понять эту концепцию. Regaurds, joe – JAVAJoseph