【发布时间】:2015-05-26 09:26:51
【问题描述】:
以下代码编译(使用 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 的原因,也是我特别询问拆箱/装箱而不是比较结果的原因。
【问题讨论】:
-
当然,如果您运行此代码并打印输出,您可以自己确定。
-
该问题与用于将其标记为重复的问题不完全相同:)
-
@Scruffy - 没那么简单。
Integer类维护-128 to 127之间的值的内部缓存。因此,即使您使用==将Integer i1=100与Integer i2=100进行比较,您也会得到true。当i1和i2不在该本地缓存范围内时,您将获得false -
@TheLostMind,说得好。这就是我选择 1000 作为示例的原因,我将把它添加到问题中。
标签: java autoboxing