考虑以下代码:不一致的行为
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