Давайте сделаем несколько примеров:
Случай -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
.