या ऑपरेटर छोटा-सर्किट होता है जब पहला ऑपरेंड सत्य होता है। तो,
String foo = null;
if (true || foo.equals("")) {
// ...
}
NullPointerException
फेंक नहीं देता है।
जैसा कि @prajeesh सही टिप्पणियों में इंगित करता है, जिस तरह से वास्तविक कोड में शॉर्ट सर्किटिंग का उपयोग NullPointerException
को रोकने के लिए होता है जब भी आप एक एपीआई से निपट रहे हैं जो शून्य हो सकता है। तो, उदाहरण के लिए, अगर वहाँ एक readStringFromConsole
विधि है कि या तो वर्तमान में उपलब्ध स्ट्रिंग या अशक्त रिटर्न उपयोगकर्ता कुछ भी लिखने नहीं करता है, हम
String username = readStringFromConsole();
while (username == null || username.length() == 0) {
// No NullPointerException on the while clause because the length() call
// will only be made if username is not null
System.out.println("Please enter a non-blank name");
username = readStringFromConsole();
}
// Now do something useful with username, which is non-null and of nonzero length
एक तरफ ध्यान दें के रूप में, एक API कि उपयोगकर्ता इनपुट रिटर्न लिख सकता है जब भी उपयोगकर्ता कुछ भी टाइप नहीं करता है तो रिक्त स्ट्रिंग वापस करनी चाहिए, और शून्य वापस नहीं आना चाहिए। रिटर्निंग नल यह कहने का एक तरीका है कि "कुछ भी उपलब्ध नहीं है," खाली स्ट्रिंग लौटने पर "उपयोगकर्ता ने कुछ भी टाइप नहीं किया" कहने का एक तरीका है और इसलिए इसे प्राथमिकता दी जाती है।
स्रोत
2012-04-15 18:49:17
लघु सर्किटिंग तब होगी जब पहली ऑपरेंड के परिणाम तार्किक संचालन के परिणाम को परिभाषित कर सकते हैं। '&& 'पहले' झूठी 'बनने के लिए परिणाम' झूठा 'निश्चित रूप से होगा और' || 'के लिए पहला बनने से परिणाम' सत्य 'निश्चित रूप से होगा। तो पहले ऑपरेंड 'सत्य' होने के कारण हमेशा '||' ऑपरेटर के लिए शॉर्ट सर्किट होगा। –
यह कम सीधा क्यों है || यह बिल्कुल सरल है जैसे &&। अभिव्यक्तियों की गणना रोक दी जाती है जब पूरी स्थिति का मूल्य ज्ञात होता है। अभिव्यक्तियों का मूल्यांकन बाएं से दाएं से किया जाता है। –
@ माइकलस्चमेइसर: क्षमा करें, मुझे नहीं पता कि मैं इसे सीधा होने से कैसे चूक गया। – Vivek