以下代码可在Java 8中编译:
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
但它是做什么用的?
拆箱 i1
:
boolean compared = (i1.intvalue() == i2);
或者盒子 i2
:
boolean compared = (i1 == new Integer(i2));
它是比较两个Integer
对象(通过引用)还是比较两个int
变量的值?
请注意,对于某些数字,引用比较会产生正确的结果,因为Integer类在-128
到127
之间维护了一个内部缓存(也请参阅TheLostMind的评论)。这就是为什么我在我的示例中使用了1000
并且为什么我明确询问拆箱/装箱而不是比较结果的原因。
Integer
类维护着一个内部缓存,其范围在-128 到 127
之间的值。因此,即使你使用==
比较Integer i1=100
和Integer i2=100
,你也会得到true
。只有当i1
和i2
都不在本地缓存范围内时,你才会得到false
。 - TheLostMind