Есть код:
int i =0;
i = i++;
System.out.println(i);
Выведет на консоль 0.
Вопрос, почему - 0 ?
Ответ
Offtop насчет такой конструкции в C++
Этот код может вывести 0, 1 и, вообще говоря, все что угодно. i = i++ по стандарту - это undefined behavior
Есть стандарт, который определяет такое понятие как sequence point. Так вот, разбор данного выражения в свете этих самых sequence points предполагает двукратное изменение значения i между двумя sequence point'ами. Что по стандарту ведет к undefined behavior.
Подробнее можно почитать здесь.
В Java все проще - данный код однозначно соответствует следующему коду. Подробнее - тут.
int temp = i; // temp = 0
i++; // i = 1
i = temp; // i = 0
Комментариев нет:
Отправить комментарий