下面的代碼編譯良好并在 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
提交
取消