2013-07-23 9 views
6

, मुझे पहले शुरू का एक नमूना कोड के साथ करते हैं ...जावा - कोडिंग शैली: "एबीसी" के विपक्ष और पेशेवर क्या हैं .equals ("SOMESTRING") शैली स्ट्रिंग तुलना?

String password = ""; 

if("PIRATE".equals(password)) { 
    // Do something 
} 

यहाँ देखें स्ट्रिंग निरंतर या शाब्दिक (जो) "समुद्री डाकू" दो तार की समानता की जांच करने के लिए किया जाता है। जबकि ...

String password = ""; 
if(password.equals("PIRATE")) { 
    // Do something 
} 

यह भी पिछले कोड के रूप में बिल्कुल काम करता है।

आजकल, मुझे पहली शैली "STRING_LITERAL" .equals (STRING_OBJECT), जबकि जावा लोग कोड पोस्ट करते हैं।

तो मेरा सवाल है, यह शैली कहां से आती है? और क्या यह किसी भी तरह से दूसरी शैली से बेहतर है?

असल में मुझे दूसरी शैली की तुलना में दूसरी शैली अधिक तार्किक लगता है, क्यों?

की सुविधा देता है एक आवश्यकता लेने की तरह, यदि उपयोगकर्ता द्वारा प्रदत्त-पासवर्ड "समुद्री डाकू" के बराबर है तो उस उपयोगकर्ता की अनुमति देते हैं

जब आप ऊपर आवश्यकता को लागू करने शुरू करते हैं,

String userProvidedPassword = getPaswordFromUser(); 

if(userProvidedPassword.equals("PIRATE")) { 
// Allow him 
} 

"पाइरेट" से अधिक तार्किक नहीं है .equals (userProvidedPassword);? बस इसके बारे में सोचो ...

मुझे सही अगर मैं गलत हूँ .. धन्यवाद ..


संपादित करें: क्षमा करें, this question मेरे पिछले खोज में नहीं आया था, और यह मेरे सवाल का जवाब पूरी तरह से। उन सभी लोगों के लिए भी धन्यवाद जिन्होंने यहां मदद की ..

+0

आप एक स्पष्ट नल-चेक से बचें। यह अधिक संक्षिप्त कोड के लिए बनाता है। –

+1

इसके साथ: 'userProvidedPassword.equals (" PIRATE ") 'आपको एक अतिरिक्त शून्य जांच की आवश्यकता है:' userProvidedPassword! = Null && userProvidedPassword.equals ("PIRATE") ' – NINCOMPOOP

उत्तर

8

जब आप password.equals("PIRATE") बारे में आप लगभग एक NullPointerException, जहां password पराक्रम null.

के लिए अवसरों को देखते हैं के लिए पूछ रहे हैं यह सब के बारे में NullPointerException से बचना है।

if("PIRATE".equals(password)) { 
    // Do something 
} 

बचते NullPointerException

जहां

if(password.equals("PIRATE")) { 
    // Do something 
} 

रूप thrwos आप NullPointerException अगर passwordnull है।

हालांकि, व्यक्तिगत रूप से मुझे लगता है कि यह कोड के बीच में अजीब दिखता है। और मैं हमेशा

if(password !=null && password.equals("PIRATE")){ 

//do something 

} 
+1

ग्रेट उत्तर, अच्छी नौकरी। –

+1

धन्यवाद सुश्री .. जो बताता है .. – Dreamer

+0

@ ड्रीमर ग्लाड, मैं आपकी मदद कर सकता हूं :) –

16

"PIRATE".equals(password) परिणामस्वरूप NullPointerException नहीं हो सकता है।

जबकि

password.equals("PIRATE") फेंक होगा एक NullPointerException अगर passwordnull होता है।

इसलिए पूर्व के उपयोग को प्रोत्साहित किया जाता है: यह सुरक्षित है।

+0

शानदार उत्तर, मुझे इससे पहले कभी एहसास नहीं हुआ। हिंदसाइट 20/20 है, अब स्पष्ट लगता है! –

+0

उत्कृष्ट .. धन्यवाद .. मैंने भी इस तरह से नहीं सोचा था .. इस शैली का उपयोग करते समय ** स्ट्रिंग हार्डकोडिंग ** समस्या के बारे में क्या किया जा सकता है? – Dreamer

+1

हार्डकोडेड स्ट्रिंग – bowmore

3

एकमात्र कॉन वास्तव में एक शैली समस्या है। "पाइरेट" कह रहा है .equals (पासवर्ड) को Yoda Condition कहा जाता है। हालांकि, जैसा कि लोगों ने पहले से ही कहा है, इस तरह की स्थिति का उपयोग करना सुरक्षित है (इसलिए मैं उस तरह का उपयोग जारी रखूंगा)।

+1

+1 योड की स्थिति का जिक्र करने के लिए! – NINCOMPOOP

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