Непоследовательное поведение на Java ==
Рассмотрим этот код:
class test {
public static void main(String[] args) {
test inst_test = new test();
int i1 = 2000;
int i2 = 2000;
int i3 = 2;
int i4 = 2;
Integer Ithree = new Integer(2); // 1
Integer Ifour = new Integer(2); // 2
System.out.println( Ithree == Ifour );
inst_test.method( i3 , i4 );
inst_test.method( i1 , i2 );
}
public void method( Integer i , Integer eye ) {
System.out.println(i == eye );
}
}
Это печатает:
false
true
false
Я понимаю первоеfalse
оператор == только проверяет, работают ли две ссылки на один и тот же объект, что в этом случае не так.
Следующиеtrue
а такжеfalse
заставь меня почесать голову. Почему бы Java рассмотретьi3
а такжеi4
равный ноi1
а такжеi2
разные? Оба были обернуты в Integer, не должныboth оценивать как ложное? Есть ли практическая причина этого несоответствия?