Страницы

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

суббота, 6 октября 2018 г.

Почему выводится 0?

Есть код:
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

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

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