比较Integers与==到底有什么作用?

比较Integers与==到底有什么作用?,第1张

比较Integers与==到底有什么作用?
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);

(猜测之后,运行它即可查看!)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存