Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Почему x = x++ не приводит к увеличению значения x в цикле?

#java


int x = 0;
while (x < 3) {
    x = x++;
    System.out.print(x + " ");
}


Я понимаю, что если написано y = x++, то сначала y присваивается значение х, после
чего х увеличивается на единицу. Почему этого не происходит с выражением х = х++?
    


Ответы

Ответ 1



x = x++; эквивалентно int tmp = x; x++; x = tmp; Сначала присваивается старое значение, делается инкрементирование, присваивается старое значение - поэтому цикл бесконечный, x = 0 всегда.

Ответ 2



x++ увеличивает x и возвращает старое значение (т.е. 0). x = присваивает старое значение обратно. И x снова становится равным 0. В следующей итерации все повторяется; В итоге x всегда будет 0 Посмотрите в отладчике.

Ответ 3



Если рассмотреть, байткод который генерируется из выражения : 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;

Ответ 4



Потому что у вас стоит постфиксный инкремент, то есть сначала присваивается, а потом инкрементируется. Чтобы работало нужно использовать префиксный инкремент ++x погуглите про отличия постфиксного и префиксного инкремента/декремента.

Комментариев нет:

Отправить комментарий