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 Strings"" instanceof Stringnull instanceof String
नहीं यह नहीं। यदि इसका पहला ऑपरेंड है, तो instanceofवापस आ जाएगा ।falsenull
बस एक 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");
}
}