Он определен в JLS # 15.21.1 :
Если операнды оператора равенства имеют числовой тип или один из числового типа (§5.6.2).
blockquote>И JLS # 5.6.2. :
Когда оператор применяет двоичное числовое продвижение к паре операндов, каждое из которых должно обозначать значение, которое можно конвертировать в числовой тип, применяются следующие правила, чтобы :
blockquote>
- Если какой-либо операнд имеет ссылочный тип, он подвергается распаковке преобразования [...]
Итак, чтобы ответить на ваши вопрос,
Integer
распаковывается вint
.
Объяснение
Пожалуйста, ознакомьтесь с приведенной ниже ссылкой, которая поможет вам разобраться с подробным описанием авто-бокса с подходящим примером.
Refer Link: http://javarevisited.blogspot.in/2012/07/ авто-бокс-и-распаковка-в-Java-be.html
Давайте сделаем несколько примеров:
Случай -1:
public static void main(String[] args) {
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
System.out.println(compared);
}
Байт-код:
....
16: if_icmpne 23 // comparing 2 integers
....
Случай -2:
public static void main(String[] args) {
Integer i1 = 1000;
Integer i2 = 1000;
//int i2 = 1000;
boolean compared = (i1 == i2);
System.out.println(compared);
}
Bytecode:
...
16: if_acmpne 23 // comparing references
....
Итак, в случае сравнения Integer
и int
с ==
Integer
распаковывается в int
, а затем сравнение
В случае сравнения 2 Integers
сравниваются ссылки 2 Integers
.