Niespójne zachowanie na Java ==
Rozważ ten kod:
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 );
}
}
Drukuje:
false
true
false
Rozumiem pierwszyfalse
, operator == sprawdza tylko, czy dwa odwołania działają na tym samym obiekcie, co w tym przypadku nie jest.
Następującetrue
ifalse
każ mi drapać się po głowie. Dlaczego Java powinna brać pod uwagęi3
ii4
równy alei1
ii2
różne? Oba zostały zapakowane do liczby całkowitej, nie powinnyobie ocenić na false? Czy istnieje praktyczny powód tej niespójności?