下面的代码编译良好并在 java 中产生 true 。我读过 java 不会同时进行两次转换,就像将int文字值(或变量)分配给Double包装器引用时一样。那么为什么与使用 = 运算符相比,它编译得更好呢?double double1 = 3.00;Integer wInt = new Integer("3");if(wInt == double1);
1 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
与其他数学运算符(例如 )一样+
,该运算符对其操作数==
执行二进制数值提升。
当运算符将二进制数字提升应用于一对操作数时(每个操作数必须表示可转换为数字类型的值),将按顺序应用以下规则:
如果任何操作数是引用类型,则将对其进行拆箱转换(第 5.1.8 节)。
加宽基元转换(第 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)
添加回答
举报
0/150
提交
取消