2014-05-21 65 views
1

嗨,我修改和理解(平等之間的差異)和「==」但是這代碼真的讓我困惑:Java - 這兩個對象怎麼可以彼此相等?

public class MyTest { 
    public static void main(String[] args) { 
     Integer w = new Integer(1); 
     Integer x = 1; 
     double z = x; 
     System.out.println(z == w); 
    } 
} 

如何使用時,雙對象具有相同的參考在內存中的Integer對象'=='?無法理解這一點。感謝您的閱讀!

回答

16

如果使用==運算符比較基元和包裝器,那麼包裝器值將被取消裝箱並與原始值進行比較。

JLS 15.21.1

15.21.1。數值相等運算符==和!=

如果相等運算符的操作數都是數字型的,或 一個是數字型的,另一種是轉換(§5.1.8)到 數值類型,二進制數值提升是在操作數 (§5.6.2)上執行。

+1

謝謝你,在準備考試時我有一個棘手的問題。 – Gabriel

+0

你寫Abimaran是不正確的。 –

+0

@MironBalcerzak,那麼什麼是正確的?你能鏈接到JLS嗎? –

0

A double不是參考,因爲它是原始類型。這是一個值。 Double本來是一個參考。

當你寫z == w,其中zdouble -typed和wInteger -typed,運行時肯定要比較的東西。顯然,它必須比較同類事物。它不會比較double值與Integer參考值。相反,它將取消Integer,並將拆箱後獲得的int值與double值進行比較。兩者都是1,布爾運算符將返回true

0

這裏不對對象進行比較,但primitive類型與拆箱的feature相比較。