当前位置: 首页 > 知识库问答 >
问题:

对于基元和装箱的值使用==时,是自动装箱还是取消装箱

华欣怡
2023-03-14
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
boolean compared = (i1.intvalue() == i2);
boolean compared = (i1 == new Integer(i2));

请注意,对于某些数字,引用比较将产生正确的结果,因为Integer类维护了-128127之间的值的内部缓存(另请参阅TheLostMind的注释)。这就是为什么我在示例中使用1000的原因,也是为什么我特别询问取消装箱/装箱而不是比较结果的原因。

共有1个答案

阳枫涟
2023-03-14

它在JLS#15.21.1:

如果相等运算符的操作数都是数值型的,或者一个是数值型的,另一个是可转换(§5.1.8)为数值型的,则对操作数执行二进制数值提升(§5.6.2)。

和JLS#5.6.2:

    null
 类似资料:
  • 问题内容: 以下代码进行编译(使用Java 8): 但是它是做什么的呢? 取消装箱: 或盒子: 那么它是比较两个对象(按引用)还是按值比较两个变量? 请注意,对于某些数字,引用比较将产生正确的结果,因为Integer类会维护一个介于to 之间的值的内部缓存(另请参见TheLostMind的注释)。这就是我在示例中使用的原因,也是为什么我特别询问拆箱/装箱而不是比较结果的原因。 问题答案: 它在JL

  • 自JDK5.0以来,Java引入了自动装箱/取消装箱。这个技巧很简单而且很有帮助,但是当我开始测试包装器类和原始类型之间的不同转换时,我真的很困惑自动装箱的概念在Java是如何工作的。例如: 拳击 在尝试了不同的情况(、、、)后,编译器接受的唯一情况是做作运算符右侧值的类型为。当我查看的源代码时,我发现它只实现了一个带有参数的构造函数。 所以我的结论是自动装箱的概念是基于在包装类中实现的构造函数。

  • 我正在考虑这个简单的代码: 结果 因此,结果是好的,但是,这种比较是如何工作的呢?角色对象是否取消绑定到角色,或者聊天是否自动装箱到角色?

  • 本文向大家介绍自动装箱和拆箱?相关面试题,主要包含被问及自动装箱和拆箱?时的应答技巧和注意事项,需要的朋友参考一下 自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。 比如:把int转化成 Integer,double转化成 Double,等等。反之就是自动拆箱。 原始类型: boolean,char,byte,short,int,long,float,double 

  • 有以下代码: 它打印: 12 这个不能编译。为什么?