2012-05-08 4 views
11

कोड की निम्न दो पंक्तियों पर विचार करेंकौन सा बेहतर प्रदर्शन किया है:! परीक्षण = अशक्त या नल = परीक्षण

if (test ! = null) 

और

if (null != test) 

है वहाँ ऊपर दो बयान, प्रदर्शन में कोई अंतर नहीं है बुद्धिमान? मैंने बाद में उपयोग करने वाले कई लोगों को देखा है और जब उनसे सवाल किया गया तो वे इसका ठोस अभ्यास नहीं करते हैं।

+3

यह http://stackoverflow.com/questions/2369226/null-check-in-java का डुप्लिकेट है, सिवाय इसके कि यह एक का उपयोग कर रहा है! = बराबर के बजाय। –

+0

इसी तरह के प्रश्न http://stackoverflow.com/questions/15518958/null-check-coding- standard/15519045 –

+0

जबकि हम सर्वोत्तम प्रथाओं के सवाल पर हैं, तो आप "if" और "के बीच रिक्त स्थान जोड़ना शुरू कर सकते हैं। ("जावा कोडिंग सम्मेलनों का पालन करने के लिए इस मामूली कोड शैली परिवर्तन को जोड़ना भी सबसे आसान कोड समीक्षक (मुझे) आपके बयान के बारे में कुछ भी कहना नहीं होगा। Http://www.oracle.com/technetwork/java/javase/ प्रलेखन/codeconventions-142311.html # 44 9 – Russ

उत्तर

20

कोई फर्क नहीं पड़ता।

दूसरा एक केवल इसलिए है क्योंकि सी/सी ++ जहां प्रोग्रामर हमेशा तुलना करने के बजाय असाइनमेंट करते थे।

उदा।

// no compiler complaint at all for C/C++ 
// while in Java, this is illegal. 
if(a = 2) { 
} 
// this is illegal in C/C++ 
// and thus become best practice, from C/C++ which is not applicable to Java at all. 
if(2 = a) { 
} 

जबकि जावा कंपाइलर संकलन त्रुटि उत्पन्न करेगा।

इसलिए मैं पठनीयता की वजह से व्यक्तिगत रूप से पहले व्यक्ति को प्राथमिकता देता हूं, लोग बाएं से दाएं पढ़ते हैं, जो null is not equal to test के बजाय if test is not equal to null के रूप में पढ़ते हैं।

+0

धन्यवाद। मैं इसे एक उत्तर के रूप में चिह्नित करूंगा। –

2

दूसरा मुझे "योड हालत" जैसा दिखता है, यानी if(2 == x) ... और बहुत कम पठनीय है।

3

कोई प्रदर्शन अंतर नहीं है लेकिन मुझे व्यक्तिगत रूप से दूसरा भ्रमित करने वाला लगता है।

1

कुछ बुनियादी टाइपो से बचने के लिए यह सबसे अच्छा अभ्यास है कि अधिकांश आधुनिक आईडीई उठाएंगे, क्योंकि कभी-कभी आप अधिक जटिल प्रकारों के बीच तुलना करना चाहते हैं जो शून्य नहीं हैं और आकस्मिक असाइनमेंट कर रहे हैं। तो पैटर्न वही रहता है, लेकिन मैंने इसे कभी भी प्रदर्शन से जोड़ा नहीं देखा है और इसे कभी भी विशेष बाइट कोड उत्पन्न नहीं किया है।

विचार स्थिर, ज्ञात मान पहले होना है, इसलिए जब आप तुलना करते हैं तो आप किसी भी प्रकार का अजीब अपवाद नहीं फेंक सकते हैं।

हालांकि दो तरीकों में से कोई भी "अधिक सही" नहीं है, इसलिए यह तय करने के लिए कि आप क्या उपयोग करना चाहते हैं, यह पूरी तरह से आप पर निर्भर है।

20

वे बिल्कुल वही हैं। दूसरा एक जब समतुल्य का उपयोग करके मतलब कर सकते हैं:

if(test.equals("bla")) 

कर सकते हैं:

if("bla".equals(test)) 

एक NullPointerException जबकि कभी नहीं फेंक सकते हैं।

+0

धन्यवाद +1। यह समझ में आता है –

1

कोई फर्क नहीं पड़ता। लेकिन दूसरी तरफ आप टाइपो से test = null से बचें। दूसरी तरफ Beacause आप संकलक त्रुटि मिलेगा।

+0

जब तक 'test' java.lang.Boolean प्रकार का ऑब्जेक्ट नहीं है, तो आपको एक मिल जाएगा पहले मामले में कंपाइलर त्रुटि भी। ऑब्जेक्ट टेस्ट = शून्य; \t \t अगर (test = null) { \t \t \t // संकलित नहीं करता है। ऑयल को बूलियन \t \t} में परिवर्तित नहीं कर सकता – Polygnome

1

बाद वाले का उपयोग करने के लिए यह सबसे अच्छा अभ्यास नहीं है। दोनों बराबर हैं, लेकिन पूर्व पढ़ने के लिए आसान है।

यह "सर्वोत्तम अभ्यास" सी से आता है जहां बूलियन मौजूद नहीं है। इसके बजाय इंटीजर का उपयोग किया जाता है, और if (foo = 1) एक वाक्यविन्यास त्रुटि नहीं है, लेकिन if (foo == 1) से बिल्कुल अलग है।

जावा में, केवल बुलियन अभिव्यक्ति एक के अंदर हो सकती है, और यह अभ्यास अधिक समझ में नहीं आता है।

0

दो रूपों के बीच वास्तव में कोई अलग नहीं है। कोई प्रदर्शन समस्या नहीं है लेकिन निम्नलिखित नोट्स हैं:

  • पहला फॉर्म कोड रीडर के लिए पठनीय है, क्योंकि लोग आमतौर पर बाएं-टू-राइट कोड पढ़ते हैं।
  • दूसरा रूप है, कोड लेखक के लिए बेहतर है क्योंकि जावा में = ऑपरेटर काम के लिए है और == ऑपरेटर परीक्षण समकक्ष के लिए है, लेकिन लोगों को आम तौर if बयान = बजाय == में उपयोग करते हुए, दूसरे approch डेवलपर हो रही द्वारा Compile-Time-Error क्योंकि अशक्त नहीं कर सकते असाइनमेंट कथन के Left-Side में उपयोग करें।