将 == 用于基元和装箱值时,是自动装箱已完成,还是取消装箱完成
2022-08-31 13:39:44
以下代码进行编译(使用 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 类维护了介于 到 之间的值的内部缓存(另请参阅 TheLostMind 的注释)。这就是为什么我在示例中使用的原因,以及为什么我专门询问拆箱/装箱而不是比较结果的原因。-128
127
1000