Я делал обзор некоторого кода и наткнулся на экземпляр кого-то после инкрементной переменной-члена, которая была классом-оболочкой в Integer. Я попробовал это сам и был искренне удивлен, что он работает.
Integer x = 0;
System.out.print(x++ + ", ");
System.out.print(x);
Отпечатает 0, 1
, а не 0, 0
, как я ожидал. Я просмотрел спецификацию языка и не могу найти ничего подобного. Может ли кто-нибудь объяснить мне, почему это работает и безопасно ли оно на нескольких платформах? Я бы подумал, что это разложится на
Integer x = 0;
int temp1 = x.intValue();
int temp2 = temp1 + 1;
System.out.println(temp1);
temp1 = temp2;
System.out.println(x.intValue());
Но, видимо, есть что-то в спецификации, которые заставляют его добавлять x = temp1;
до последней строки