Java Integer相等比较中算术运算导致结果变化的原因疑问
Integer使用==比较的结果说明
- 你的推测完全成立。
- 第一行表达式
new Integer(1000) == new Integer(1000)返回false的原因:两侧都是通过new创建的独立Integer引用对象,未触发自动拆箱,此时==执行对象内存地址的比较,两个堆上独立对象的地址必然不同。 - 第二行表达式
new Integer(1000) == new Integer(1000) + new Integer(0)返回true,是运算符优先级与自动拆箱规则共同作用的标准流程:- 算术运算符
+的优先级高于相等判断运算符==,程序优先计算右侧表达式new Integer(1000) + new Integer(0)。算术运算会自动触发拆箱转换,将两个Integer对象转为对应的int基本类型值,计算得到int类型的1000。 - 右侧计算完成后,
==的左右两侧分别是Integer类型的包装对象、int类型的基本值。根据Java语言规范,当相等比较的一侧为基本数值类型、另一侧为数值包装类型时,会自动将包装类型拆箱为基本类型,最终执行两个int值的相等性比较,结果为true。
- 算术运算符
- 该行为是Java语言规范明确定义的标准行为,无未定义的实现差异。
内容的提问来源于stack exchange,提问作者Gonen I
相关产品推荐
相关产品推荐

