2013-08-26 15 views
22
class datatype1 
{ 

    public static void main(String args[]) 
    { 
    int i1 = 1; 
    Integer i2 = 1; 
    Integer i3 = new Integer(1); 

    System.out.println("i1 == i2"+(i1==i2)); 
    System.out.println("i1 == i3"+(i1==i3)); 
    System.out.println("i2 == i3"+(i2==i3)); 
} 

} 

आउटपुटपूर्णांक बनाम पूर्णांक तुलना जावा

i1 == i2true 
i1 == i3true 
i2 == i3false 

कोई व्याख्या कर सकते हैं कारण है कि मैं झूठी जब i2 और i3 की तुलना? un-boxing में

+1

आप पॉइंटर्स की तुलना कर रहे हैं, मान नहीं ... –

+8

संदर्भ, पॉइंटर्स नहीं। – chrylis

+4

ऐसे प्रश्न कैसे उठाए जाते हैं ?? –

उत्तर

48
i1 == i2 

परिणाम और एक नियमित पूर्णांक तुलना किया जाता है। (first point in JLS 5.6.2 देख)

i2 == i3 

परिणाम reference comparsion में। याद रखें, i2 और i3 दो अलग-अलग ऑब्जेक्ट्स हैं। (JLS 15.21.3 देख)

+4

उल्लेख करना न भूलें कि 'Integer.valueOf (1)' का परिणाम 'सत्य' होगा, क्योंकि जावा पूर्णांक कैश – durron597

+0

@ durron597 का उपयोग करेगा जो सही दोस्त है .. –

10
Integer i2 = 1; 

यह परिणाम autoboxing है। आप int (आदिम प्रकार) को इसके संबंधित रैपर में परिवर्तित कर रहे हैं।

Integer i3 = new Integer(1); 

यहां ऑटोबॉक्सिंग की कोई आवश्यकता नहीं है क्योंकि आप सीधे इंटीजर ऑब्जेक्ट बना रहे हैं।

अब

i1 == i2 
i1 == i3 

में i2 और i3 स्वचालित रूप से अनबॉक्स्ड और नियमित रूप से पूर्णांक तुलना जगह लेता है जिसके कारण आप सही मिल रहे हैं।

अब

i2 == i3 

यहाँ दोनों i2 पर विचार करने और i3 पूर्णांक वस्तुओं है कि आप की तुलना कर रहे हैं। चूंकि दोनों अलग-अलग वस्तुएं हैं (चूंकि आपने नए ऑपरेटर का उपयोग किया है) यह स्पष्ट रूप से झूठा होगा। नोट == ऑपरेटर जांचता है कि क्या दो संदर्भ एक ही ऑब्जेक्ट को इंगित करते हैं या नहीं। असर .equals() विधि अगर ओवरराइड नहीं है तो वही काम करता है।

यह

Integer i2 = new Integer(1); 
    Integer i3 = new Integer(1); 
    System.out.println("i2 == i3 "+(i2==i3)); 

कह जो फिर आप गलत दे देंगे के समान है।

+0

कॉपी पेस्ट त्रुटि आपकी दूसरी कोड लाइन समान है पहले –

+3

इसके लिए अच्छी माफ़ी है लेकिन मतदान करने की बजाय किसी ने भी इसे संपादित कर सकता था। –

+0

मैं डाउनवॉटर नहीं था, मैं बस कह रहा था कि पहली नजर में गलत था। और यह मेरे लिए संपादित करने के लिए बहुत मामूली था! –

संबंधित मुद्दे