Кто-нибудь может объяснить, почему вот здесь
int i = 0;
i = i++;
System.out.println(i); // вернет 0
а здесь
int i = 0;
i++;
System.out.println(i); // вернет 1
?
как я понимаю, эта задачка скорее просто размять мозги? ну или из серии «удивительное рядом»?)
потому что я не вижу прикладной ценности в ней. в том плане, что мало кто станет всерьез в своем коде делать что-то типа такого:
i = i++;
лично мне это больше похоже на говнокод, честно говоря))
поэтому и знание таких деталей не очень ценно, ведь мало кто будет использовать такие конструкции в реальном проекте :) так что не стоит переживать, если с ходу не смог ответить на такой «простой» казалось бы вопрос :)
но, конечно же, знания как и почему оно так работает ни в коем случае не помешают :)
Но она лишь обрисовывает проблему. И специфична для C++. Интересно было бы почитать что-то конкретно для Java. А именно про то, почему для компилятора было выбрано то или иное поведение (неопределённости у него нет, вывод всегда один) и какое когда именно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
потому что я не вижу прикладной ценности в ней. в том плане, что мало кто станет всерьез в своем коде делать что-то типа такого:
лично мне это больше похоже на говнокод, честно говоря))
поэтому и знание таких деталей не очень ценно, ведь мало кто будет использовать такие конструкции в реальном проекте :) так что не стоит переживать, если с ходу не смог ответить на такой «простой» казалось бы вопрос :)
но, конечно же, знания как и почему оно так работает ни в коем случае не помешают :)
Байт-код второго варианта:
В первом случае идет разбивка на две операции:
Присвоение значения переменной i ей же
Инкремент переменной i (т.к. постфиксная форма)
Во втором, по сути, одна операция, которую можно разложить на:
По идее нужно было присвоить i 0, а потом постфиксно увеличить i на 1. И вывести 1.
Но она лишь обрисовывает проблему. И специфична для C++. Интересно было бы почитать что-то конкретно для Java. А именно про то, почему для компилятора было выбрано то или иное поведение (неопределённости у него нет, вывод всегда один) и какое когда именно.