考慮以下代碼:不一致的行爲
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
不同?兩者都被封裝到整數,不應該都評價爲false?這種不一致是否存在實際原因?
我相信FindBugs會告訴你你的錯誤。 – 2009-07-18 23:18:43