嘿,我正在尝试理解以下代码片段。
public static void main(String[] args) {
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
}
这种方法运行所有的println指令。即使i1 != i2为真,但i3 == i4。乍一看,这让我感到奇怪,它们应该作为引用都是不同的。我可以想出一个解释,如果我将相同的byte值(-128到127)传递给i3和i4,则它们始终相等作为引用,但任何其他值都会使它们不同。
我无法解释这个问题,你能否指向一些文档或提供一些有用的见解?
谢谢
Integer.valueOf(...)
转换,而不是new Integer(...)
? - Cruncher