Дан код

int y = 0;
y = y++;

Вопрос: чему равен "y" и почему?


Рассмотрим по шагам:

        int y = 0;
        // результат: в "y" поместили 0
        y = y++;
        // 1 шаг во временной переменной запоминается значение "y" (так как y++ постинкремент)
        // например, назовем эту переменную int temp, тогда будет int temp = y;
        // а так как y = 0, то и temp = 0;
        // 2 шаг "y" увеличивается на 1, так как y++ разворачивается в y = y + 1;
        // "y" теперь равен 1
        // 3 шаг выполняется оператор присваивания = (который знак равенства)
        // на этом шаге той переменной, что слева от знака = присваивается то, что справа
        // у нас переменной "y" присваивается то, что справа. 
        // а справа у нас уже больше не y++, а временная переменная temp
        // поэтому теперь выражение выглядит так: y = temp;
        // поэтому в y сохраняется 0 (так как temp == 0)
        // результат: вывод числа 0

Или кратко:

// y = y++;
int temp = y;
y = y + 1;
y = temp;

Правильный ответ: y равен нулю.