2010-06-23 17 views
8

मैंस्ट्रिंग तुलना में अक्षर की सही स्थिति क्या है?

if (localName.equals("TaxName")) { 

है, लेकिन PMD कहते

Position literals first in String comparisons 
+1

खैर, PMD शाब्दिक सही पर किया जा रहा है के बारे में शिकायत करता है, तो , मुझे नहीं लगता कि आपके पास बाईं ओर डालने से अधिक विकल्प हैं (उर्फ [योडा हालत] (http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2430307#2430307) शैली) :) –

उत्तर

23

"TaxName".equals(localName) बेहतर है के रूप में यदि localName अशक्त आप एक नल पॉइंटर एक्सेप्शन नहीं मिलेगा है।

+4

यह केवल तभी बेहतर है जब आप इसके लिए अनुमति देना चाहते हैं। व्यक्तिगत रूप से, मुझे ऐसी स्थिति याद नहीं है जहां यह मेरे कोड में कोई त्रुटि नहीं थी जिसे मैं जल्द से जल्द पकड़ना चाहता था। – Davor

+0

उनको बदलने के लिए regex: '([a-zA-Z] [^] +) \। बराबर \ ((" [^ "] *") \) ' इसके साथ बदलें:' \ 2.equals (\ 1) ' – Kuronashi

5

मैं पहले की स्थिति शाब्दिक पसंद करते हैं, अर्थात:

if ("TaxName".equals(localName)) { ... 

इस तरह आप के बजाय NullPointerException होने का अशक्त के मामले के लिए एक सही तुलना करते हैं,।

7

पीएमडी आपको क्यों बता रहा है क्यों यह चेतावनी उत्पन्न करता है। PMD वेबसाइट पर the rules documentation से:

स्ट्रिंग तुलना में पहली

स्थिति शाब्दिक - इस तरह से स्ट्रिंग अशक्त आप एक NullPointerException नहीं मिलेगा है अगर, यह सिर्फ झूठी आरंभ कर देंगे।

+1

कुछ मामलों में, यदि कोई चर शून्य है, तो कोड को इसे स्ट्रिंग के समान असमान माना जाना चाहिए। अन्य मामलों में, यह एक समस्या इंगित करता है और जितनी जल्दी समस्या को ध्वजांकित किया जाता है, बेहतर होता है। बाद की स्थिति में, 'चर .equals ("शाब्दिक") बेहतर है, क्योंकि यह परिवर्तनीय है अगर चर शून्य है। – supercat

2

व्यक्तिगत रूप से, यह मुझे समझ में नहीं आता है। यदि कोड एक NullPointerException पकड़ता है, तो यह काम किया गया है कि आपको बाद में नहीं करना होगा। यदि स्थानीय नाम शून्य हो जाता है, और इससे बाद में कोई समस्या आती है, तो पता लगाना कठिन होगा। कंपाइलर को खुश करने के लिए कोड न बदलें। यदि आपका कोड NullPointerException फेंकता है, तो यह बाद में आपको डीबगिंग सहेजा गया है।

+0

मैं पूरी तरह से असहमत हूं और प्रारंभिक 'शून्य' चेक करने के बजाय 'CONSTANT.equals (variable)' लिखना पसंद करता हूं। –

+0

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

+1

@CurtainDog त्रुटियों में संकलक चेतावनियों को अपग्रेड करने से प्रभावी रूप से एक वर्ष के लिए मेरी कंपनी की उत्पादकता को रोक देगा। मुझे यकीन है कि एसओ पर 9 0% लोग सहमत होंगे। मैं यह नहीं कह रहा हूं कि आप सिद्धांत में सही नहीं हैं, क्योंकि ये चेतावनियां अक्सर बग में बदल जाती हैं, मैं बस इतना कह रहा हूं कि ऐसा करने से आसान कहा जाता है। – corsiKa

-1

कि चेतावनी से बचने के लिए एक सरल समाधान की जांच nullpointers से पहले, जो हर वस्तु हम प्रबंधन, में सिफारिश की है न केवल यह बहुत ही मामले में:

if (localName!=null && localName.equals("TaxName")) { 
    ... 
} 
संबंधित मुद्दे