Здесь:
Integer i = new Integer(10);
Integer i1 = new Integer(10);
вы запрашиваете динамически размещаемые два экземпляра Integer типа класса, это даст вам две разные ссылки. Если вы измените его на:
Integer i = 10;
Integer i1 = 10;
затем ссылку на I и i1 будет равен, так как при малых значениях классов обертки использовать кэшированные объекты.
Это:
i++;
i1++;
объясняется: 15.14.2. Postfix Increment Operator ++ в JLS (курсив мой):
Перед добавлением, бинарное числовое расширение (§5.6.2) выполняется на значение 1 и значение переменной. При необходимости сумма сужается сужением примитивной конверсии (§5.1.3) * и/или подвергнутой конверсии бокса (§5.1.7) типу переменной перед ее сохранением.
также примечание ниже важно где сказано, что перед применением оператора распаковка преобразования может произойти следующее:
Обратите внимание, что двоичное числовое расширение упоминалось выше, может включать в себя преобразование распаковки (§5.1.8) и преобразование значений (§5.1.13). При необходимости преобразование набора значений применяется к сумме до ее сохранения в переменной. так это означает, что он боксировал обратно к типу обертки
так в конце концов, после применения оператора ++ либо ссылочного типа выделяемой экземпляры Integer или коробочного класс Integer, то конец с коробочным целым числом, если его значение находится в правильном диапазоне для типов в штучной упаковке.
Возможный дубликат [Как правильно сравнить два типа Integer в Java? ] (http://stackoverflow.com/questions/1514910/how-to-properly-compare-two-integers-in-java) – ArcticLord
@ Ишан Вы можете проверить формулировку вопроса? Вы говорите: «Первый оператор должен печатать« истина », как и ожидалось», но в листинге показан первый оператор, который печатает false (аналогично для второго оператора печати). –