null instanceof SomeClass
लौटेंगे false
या फेंक देंगे NullPointerException
?
null instanceof SomeClass
लौटेंगे false
या फेंक देंगे NullPointerException
?
जवाबों:
नहीं, उदाहरण के उपयोग से पहले एक अशक्त जांच की आवश्यकता नहीं है।
अभिव्यक्ति x instanceof SomeClass
है false
अगर x
है null
।
जावा भाषा विशिष्टता से, खंड 15.20.2, "टाइप तुलना ऑपरेटर उदाहरण" :
"रन के समय में,
instanceof
ऑपरेटर का परिणाम होता हैtrue
अगर RelationalExpression काnull
मान नहीं है और संदर्भ को बिना किसी संदर्भ के बिना संदर्भ संदर्भ में डाला जा सकता हैClassCastException
। अन्यथा परिणाम हैfalse
।"
इसलिए यदि ऑपरेंड शून्य है, तो परिणाम गलत है।
try it
क्योंकि वर्तमान व्यवहार गारंटीकृत व्यवहार के समान नहीं है ।
Effective Java
- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
instanceof
ऑपरेटर लगभग 1.0 साल पहले जारी किए गए जावा 1.0 का हिस्सा था। मौजूदा कोड को तोड़ने के तरीके में अब व्यवहार बदलना संभव नहीं है, उस भारी लागत से कुछ लाभ अनुपस्थित हैं। बीस साल पहले, हो सकता है कि यदि सही तर्क दिया जा सकता है, या एक अशक्त तर्क के लिए अपवाद फेंकने के लिए सही वापसी के लिए तर्क हो सकते हैं। लेकिन उन परिभाषाओं में अलग-अलग अशक्त जांच की आवश्यकता होती है।
वास्तव में बहुत अच्छा सवाल। मैंने सिर्फ अपने लिए कोशिश की।
public class IsInstanceOfTest {
public static void main(final String[] args) {
String s;
s = "";
System.out.println((s instanceof String));
System.out.println(String.class.isInstance(s));
s = null;
System.out.println((s instanceof String));
System.out.println(String.class.isInstance(s));
}
}
प्रिंटों
true
true
false
false
JLS / 15.20.2। कम्पैरिजन ऑपरेटर टाइपो टाइप करें
रन टाइम पर,
instanceof
ऑपरेटर का परिणाम यहtrue
होता है कि जब RelationalExpression का मान नहीं हैnull
और संदर्भ को बिना उठाए बिना ReferenceType में डाला जा सकता हैClassCastException
। अन्यथा परिणाम हैfalse
।
एपीआई / कक्षा # अंतर्ज्ञान (वस्तु) है
यदि यह
Class
ऑब्जेक्ट किसी इंटरफ़ेस का प्रतिनिधित्व करता है, तो यह विधि वापस आती हैtrue
यदि वर्ग या निर्दिष्टObject
तर्क का कोई सुपरक्लास इस इंटरफ़ेस को लागू करता है; यहfalse
अन्यथा लौटता है। यदि यहClass
ऑब्जेक्ट एक आदिम प्रकार का प्रतिनिधित्व करता है, तो यह विधि वापस आती हैfalse
।
s
एक वस्तु संदर्भ चर है। यह वास्तव में मौजूदा वस्तु ( ""
) को संदर्भित कर सकता है या यह (a) null
शाब्दिक संदर्भ को संदर्भित कर सकता है।
null
स्ट्रिंग डेटा नहीं है, इससे कोई फर्क नहीं पड़ता कि चर किस ओर इशारा कर रहा है। उदाहरण के लिए, के s instanceof String
रूप में ही नहीं है field.getType().equals(String.class)
।
s instanceof String
s
"" instanceof String
null instanceof String
नहीं यह नहीं। यदि इसका पहला ऑपरेंड है, तो instanceof
वापस आ जाएगा ।false
null
बस एक tidbit के रूप में :
यहां तक कि लौट आएगा ।(
((A)null)
instanceof A)
false
(यदि टाइपकास्टिंग null
आश्चर्यजनक लगता है, तो कभी-कभी आपको ऐसा करना पड़ता है, उदाहरण के लिए इस तरह की स्थितियों में:
public class Test
{
public static void test(A a)
{
System.out.println("a instanceof A: " + (a instanceof A));
}
public static void test(B b) {
// Overloaded version. Would cause reference ambiguity (compile error)
// if Test.test(null) was called without casting.
// So you need to call Test.test((A)null) or Test.test((B)null).
}
}
तो Test.test((A)null)
छपेगा a instanceof A: false
।)
पुनश्च: यदि आप काम पर रख रहे हैं, तो कृपया इसे नौकरी के साक्षात्कार प्रश्न के रूप में उपयोग न करें। : डी
नहीं । जावा शाब्दिक null
किसी भी वर्ग का उदाहरण नहीं है। इसलिए यह किसी भी वर्ग का उदाहरण नहीं हो सकता । instanceof
या तो वापस आ जाएगी false
याtrue
इसलिए <referenceVariable> instanceof <SomeClass>
रिटर्न false
जब referenceVariable
मान शून्य है।
instanceof
ऑपरेटर स्पष्ट की जरूरत नहीं है null
, चेक के रूप में यह फेंक नहीं है एक NullPointerException
संकार्य है यदि null
।
रन के समय में, instanceof
ऑपरेटर का परिणाम सही है यदि संबंधपरक अभिव्यक्ति का मूल्य नहीं है null
और संदर्भ को क्लास के अपवाद को उठाए बिना संदर्भ प्रकार में डाला जा सकता है।
यदि ऑपरेंड है null
, तो instanceof
ऑपरेटर लौटता है false
और इसलिए, स्पष्ट रूप से अशक्त चेक की आवश्यकता नहीं होती है।
नीचे दिए गए उदाहरण पर विचार करें,
public static void main(String[] args) {
if(lista != null && lista instanceof ArrayList) { //Violation
System.out.println("In if block");
}
else {
System.out.println("In else block");
}
}
इसका सही उपयोग instanceof
नीचे दिखाया गया है,
public static void main(String[] args) {
if(lista instanceof ArrayList){ //Correct way
System.out.println("In if block");
}
else {
System.out.println("In else block");
}
}