int x = 0;
while (x < 3) {
x = x++;
System.out.print(x + " ");
}
Я понимаю, что если написано y = x++
, то сначала y
присваивается значение х
, после чего х
увеличивается на единицу. Почему этого не происходит с выражением х = х++
?
x = x++;
эквивалентно
int tmp = x;
x++;
x = tmp;
Сначала присваивается старое значение, делается инкрементирование, присваивается старое значение - поэтому цикл бесконечный, x = 0
всегда.
x++
увеличивает x
и возвращает старое значение (т.е. 0
). x =
присваивает старое значение обратно. И x
снова становится равным 0
. В следующей итерации все повторяется;
В итоге x
всегда будет 0
Посмотрите в отладчике.
Если рассмотреть, байткод который генерируется из выражения :
int x = 0;
x = x++;
То получим следущее:
0: iconst_0 // положить на стек 0
1: istore_1 // сохранение значения в переменную 1
2: iload_1 // положить на стек значение из переменной 1
3: iinc 1, 1 // увеличение значения переменной с индексом 1 на 1
6: istore_1 // сохранение значения 0 в переменную 1
7: return
Что эквивалентно:
byte var10000 = x;
int x1 = x + 1;
x = var10000;
Потому что у вас стоит постфиксный инкремент, то есть сначала присваивается, а потом инкрементируется. Чтобы работало нужно использовать префиксный инкремент ++x
погуглите про отличия постфиксного и префиксного инкремента/декремента.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Дело в том, что в моем приложении в зависимости от разрядности ОС нужно вызывать разные методыСобственно, возник вопрос: как я с помощью java-кода...
Можете подсказать библиотеку, которая решает cистемы уравненийНапример: