2012-09-06 21 views
51

जब मैं संकलन और इस कोड को चलाएँ:जावा - अशक्त instanceof वस्तु का मूल्यांकन दोनों सही और झूठे

C:\Users\xxxxxx\Desktop>java Testing 
returned false 
true 

चाहिए नहीं "शून्य instanceof:

public class Testing { 
    public static void main(String... args) { 
     Object obj = null; 
     if (obj instanceof Object) { 
      System.out.println("returned true"); 
     } else { 
      System.out.println("returned false"); 
     } 
     System.out.println(" " + obj instanceof Object); 
    } 
} 

मैं कमांड लाइन पर इस मिल कुछ टाइप "हमेशा झूठी वापसी?

+2

ऐसा ही एक पहेली; 'X + 0! = X' कब होता है? बीटीडब्ल्यू आप उम्मीद करते हैं कि '+' की उच्च प्राथमिकता हो। –

+30

Btw: आप संदिग्ध बन गए हैं सकता है जब जावा सच मुद्रित और नहीं सच – Jonathan

+4

मुझे लगता है कि शीर्षक थोड़ा गुमराह है, जब तक कि यह जावा क्वांटम संस्करण थे और 'instanceof' एक quboolean लौट आए। –

उत्तर

102

यह:

" " + obj instanceof Object 

मूल्यांकन किया जाता है के रूप में:

(" " + obj) instanceof Object 

और " " + obj वास्तव में एक गैर-शून्य स्ट्रिंग जो Object का एक उदाहरण है।

+23

यह" अधिक कोष्ठक में एक अच्छा सबक है ऑपरेटर की प्राथमिकता स्पष्ट रूप से स्पष्ट नहीं होने पर कम से कम बेहतर होती है। " '" "+ (ऑब्जेक्ट ऑब्जेक्ट ऑब्जेक्ट) 'आपके द्वारा अपेक्षित मूल्य मुद्रित करेगा। – yshavit

+2

अच्छा बिंदु। यह एक तरह का प्रतिद्वंद्वी व्यवहार है जिसे आप यहोशू ब्लॉक और नील गफ्तर से _Java Puzzlers_ में पढ़ सकते हैं। –

+0

@yshavit ... या स्ट्रिंग का प्रतिनिधित्व करना चाहते हैं, तो 'String.valueOf (ऑब्जेक्ट)' और '' "+ ... 'नहीं। –

2

पिछले System.out.println में, " " + obj पहले मूल्यांकन करता है और परिणाम है, जो एक String है instanceof Object के लिए जाँच की है और परिणाम मुद्रित किया जाता है।

2

में ("" + obj) हिस्सा इसलिए इसकी कोष्ठक के बाद कोई और अधिक रिक्त जो पहले से मूल्यांकन हो जाता है। तो यह ऑब्जेक्ट का उदाहरण है।

इसके अलावा नीचे दिए गए लिंक का उल्लेख तो अपने अवधारणा स्पष्ट हो जाएगा।

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

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