以下代码进行编译(使用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
to之间的值的内部缓存127
(另请参见TheLostMind的注释)。这就是我1000
在示例中使用的原因,也是为什么我特别询问拆箱/装箱而不是比较结果的原因。
它在JLS#15.21.1中定义:
如果相等运算符的操作数都是数字类型,或者一个是数字类型,而另一个可转换为数字类型(第5.1.8节),则对这些操作数执行二进制数字提升(第5.6.2节)。
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示一个可转换为数字类型的值,以下规则适用:
- 如果任何操作数是引用类型,则将其进行拆箱转换[...]
因此,为回答您的问题,将Integer
拆箱到int
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句