Integer i1 = 1;Integer i2 = new Integer(1);System.out.println(i1 == i2);
当您为该
i1值分配1时,将装箱,创建一个
Integer对象。然后比较比较两个对象引用。引用不相等,因此比较失败。
Integer i1 = 100;Integer i2 = 100;System.out.println(i1 != i2);
因为这些都是用编译时常量初始化的,所以编译器可以并且确实将它们进行内插,并使两者都指向同一
Integer对象。
(请注意,我将值从1000更改为100。正如@NullUserException指出的那样,仅会插入小整数。)
这是一个非常有趣的测试。看看是否可以解决这个问题。为什么第一个程序打印
true,而第二个程序打印
false?使用装箱和编译器时间分析的知识,您应该能够弄清楚这一点:
// Prints "true".int i1 = 1;Integer i2 = new Integer(i1);System.out.println(i1 == i2);// Prints "false".int i1 = 0;Integer i2 = new Integer(i1);i1 += 1;System.out.println(i1 == i2);
如果您了解上述内容,请尝试预测该程序的输出:
int i1 = 0;i1 += 1;Integer i2 = new Integer(i1);System.out.println(i1 == i2);
(猜测之后,运行它即可查看!)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)