以下代码可在Java中正常编译并产生true。我已经读过Java不会一次执行两次转换,就像将一个整数文字值(或变量)分配给Double包装器引用时一样。那么,为什么与使用=运算符相比,它可以编译良好?
double double1 = 3.00;
Integer wInt = new Integer("3");
if(wInt == double1);
Run Code Online (Sandbox Code Playgroud)
与一样的其他数学运算符+,该==运算符对其操作数执行二进制数值提升。
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示一个可转换为数字类型的值,以下规则适用:
如果任何操作数是引用类型,则将其进行拆箱转换(第5.1.8节)。
扩展基元转换(第5.1.2节)适用于转换一个或两个操作数。
编译器首先将拆箱Integer为int,然后将扩大int为double。如果先进行拆箱,它将同时执行两个操作。
Java将对许多运算符隐式执行这两种转换:
二进制数值提升是对某些运算符的操作数执行的:
乘法运算符
*,/和%(§15.17)数字类型
+和-(§15.18.2)的加法和减法运算符数值比较运算
<,<=,>,和>=(§15.20.1)数值相等运算符
==和!=(§15.21.1)整数位运算符
&,^以及|(§15.22.1)在某些情况下,条件运算符
? :(第15.25节)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |