为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 java Integerwrapper==primitivedouble

为什么 java Integerwrapper==primitivedouble

慕森王 2023-08-16 09:59:30
下面的代码编译良好并在 java 中产生 true 。我读过 java 不会同时进行两次转换,就像将int文字值(或变量)分配给Double包装器引用时一样。那么为什么与使用 = 运算符相比,它编译得更好呢?double double1 = 3.00;Integer wInt = new Integer("3");if(wInt == double1);
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

与其他数学运算符(例如 )一样+,该运算符对其操作数==执行二进制数值提升。

当运算符将二进制数字提升应用于一对操作数时(每个操作数必须表示可转换为数字类型的值),将按顺序应用以下规则:

  1. 如果任何操作数是引用类型,则将对其进行拆箱转换(第 5.1.8 节)。

  2. 加宽基元转换(第 5.1.2 节)应用于转换一个或两个操作数...

编译器首先将 拆箱Integer为 an int,然后将 扩展int为 a double。如果首先进行拆箱,它将同时执行这两项操作。

Java 将为许多运算符隐式执行这两种转换:

对某些运算符的操作数执行二进制数字提升:

  • 乘法运算符*/%(§15.17)

  • 数字类型的加法和减法运算符 and +-§15.18.2)

  • 数值比较运算符<<=>>=(§15.20.1)

  • 数值相等运算符==!=(§15.21.1)

  • 整数按位运算符&^|(§15.22.1)

  • 在某些情况下,条件运算符? :(§15.25)


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信