2011-03-29 16 views
10

जावा में "वैरिएबल प्रारंभ नहीं किया जा सकता" त्रुटि से बचने के लिए स्ट्रिंग विधि (स्थानीय) चर प्रारंभ करने के लिए सबसे अच्छा अभ्यास क्या है?क्या जावा स्ट्रिंग विधि (स्थानीय) चर को शून्य या "" में प्रारंभ किया जाना चाहिए?

स्ट्रिंग एस = शून्य; या स्ट्रिंग एस = "";

क्या इससे कोई फर्क पड़ता है? यदि हां, तो कौन सा बेहतर है और क्यों?

मैंने वेब पर विवादित उत्तर पढ़े हैं।

धन्यवाद!

+0

आपके सभी उत्तरों के लिए धन्यवाद। यहां अधिक जानकारी है ... मैंने एक वेब सेवा विधि तैयार की है जो एक स्ट्रिंग देता है। कुछ स्थितियों के आधार पर, स्ट्रिंग को एक मान असाइन किया जाता है, लेकिन हमेशा नहीं। क्या मुझे शून्य या वापस आने चाहिए? – Canam

उत्तर

14

हां, इससे कोई फर्क पड़ता है। एक खाली स्ट्रिंग का संदर्भ है, एक शून्य संदर्भ है। वे वही नहीं हैं।

कौन सा बेहतर है? यह निर्भर करता है कि क्या आप एक शून्य मान या खाली स्ट्रिंग के संदर्भ चाहते हैं ... वे अलग-अलग व्यवहार करते हैं, इसलिए जिस तरीके से आप इसे चाहते हैं उसे चुनें। आम तौर पर सिर्फ असली मूल्य मैं चाहता हूँ ठीक है के साथ घोषणा के बिंदु पर चर आरंभ -

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

+0

क्या आप ऐसी स्थिति प्रदान कर पाएंगे जहां उनमें से प्रत्येक लाभकारी होगा? मैं एनपीई से बचने में मदद करता हूं, '' 'के साथ शुरू होने वाले अन्य उत्तरों से मिल गया, लेकिन इसके परिणामस्वरूप बेकार बग भी हो सकते हैं। – Abdul

1

यह सब इस बात पर निर्भर करता है कि आप अपने प्रोग्राम को क्या करना चाहते हैं। कभी-कभी यह देखने के लिए उपयोगी हो सकता है कि एक स्ट्रिंग पहले से सेट हो चुकी है या नहीं, जिस पर null सबसे अच्छा होगा। अन्य बार आप नलपॉइंटर्स को रोकना चाहते हैं जो "" बेहतर बनाता है।

0

यह वास्तव में निर्भर करता है कि आप अपने कार्यक्रम में क्या कर रहे हैं।

"" (खाली स्ट्रिंग) केवल स्ट्रिंग के साथ जुड़ा हुआ है और यह शून्य से सुरक्षित है। जब आप स्ट्रिंग क्लास से विधियों को कॉल करते हैं उदाहरण के लिए: replaceAll(), indexOf() प्रोग्राम सही ढंग से काम करेगा लेकिन जब आपके पास शून्य हो, तो आपके पास उस समय कॉल करने पर हर समय NullPointerException है।

विचार करें कि आपके आवेदन में स्ट्रिंग खाली मूल्य आपके लिए कुछ बुरा नहीं है, फिर str = "" चुनें।

ध्यान दें कि जब NullPointerException फेंक दिया जाता है तो अक्सर बेहतर होता है क्योंकि हम अपने आवेदन में एक अमान्य स्थिति के बारे में जानते हैं, इसलिए जब आप डिफ़ॉल्ट रूप से इस सेट स्ट्रिंग को शून्य से जानना चाहते हैं।

+1

स्ट्रिंग प्रारंभिक "" बाद में खोजने के लिए बग बनाने के लिए एक नुस्खा साबित हो सकता है। यह सब अंतर्निहित संदर्भ पर निर्भर करता है। –

+0

मुझे नहीं लगता कि यह नियम है। यह वास्तव में स्थिति पर निर्भर करता है और ध्यान देता है कि हमारे पास StringUtils.isEmpty है जो "" के लिए सच है और शून्य – smas

0

मैं जावा में एक स्ट्रिंग को प्रारंभ करना पसंद करता हूं, पूरी तरह से क्योंकि मैं शून्य पॉइंटर्स से बचने की कोशिश करता हूं। नल पॉइंटर्स बहुत अधिक ओवरहेड जोड़ते हैं जिसे शून्य के बजाय "" निर्दिष्ट करके हटाया जा सकता है।

+3

स्ट्रिंग प्रारंभिक "" बाद में बग को कठिन बनाने के लिए एक नुस्खा साबित हो सकता है। यह सब अंतर्निहित संदर्भ पर निर्भर करता है। –

+2

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

2

सर्वोत्तम अभ्यास जितना संभव हो सके उतने फ़ील्ड को अंतिम या डिफ़ॉल्ट मानों का उपयोग करना है ताकि ग्राहकों को खराब या अपूर्ण वस्तुओं को तुरंत चालू करने से बचा जा सके। यदि फ़ील्ड डिफ़ॉल्ट रूप से खाली स्ट्रिंग होने के लिए समझ में आता है (यानी यह तर्क त्रुटियों को जोखिम नहीं देगा) तो हर तरह से इसे इस तरह से करें। अन्यथा, कम से कम शून्य एक अपवाद फेंक देगा जब कोई क्लाइंट उस ऑब्जेक्ट पर एक विधि को आमंत्रित करता है जिसे ठीक से ठीक नहीं किया गया है।

तो सामान्य रूप से, निर्माण के दौरान पूर्ण वस्तुओं को बनाने के लिए क्लाइंट कोड को मजबूर करने का प्रयास करें। यदि आपको नहीं पता कि स्ट्रिंग निर्माण समय पर क्या होनी चाहिए, तो उन्हें पैरामीटर के रूप में पास कर दें। यदि स्ट्रिंग का उपयोग आंतरिक तर्क के लिए किया जाता है, तो यह स्थानीय चर या पैरामीटर के रूप में बेहतर हो सकता है - और उस स्थिति में मैं आम तौर पर "" के लिए शून्य पसंद करता हूं क्योंकि == शून्य शून्य से अधिक स्पष्ट है()।

0

अक्सर मैं कहूंगा: इसे घोषित करते समय अपने स्थानीय चर को प्रारंभ न करें, अगर यह "" या null जैसे डमी मान होगा। असली मान रखें, या जब तक आप इसे अंदर नहीं डाल सकते, तब तक प्रतीक्षा करें।

संकलक तब सुनिश्चित करेगा कि चर के किसी भी संभावित उपयोग से पहले कम से कम एक असाइनमेंट है। केवल कुछ ही मामलों के लिए जहां संकलक इसे समझने के लिए पर्याप्त स्मार्ट नहीं है (क्योंकि इसे स्थानीय रूप से उपलब्ध जानकारी की आवश्यकता नहीं है) क्योंकि मैं कुछ प्रारंभिकरण का उपयोग करता हूं, और फिर आमतौर पर null बेहतर होता है क्योंकि यह गलत होने पर NullPointerException के साथ दिखाता है । (मैं उस बिंदु के बाद assert s != null जोड़ सकता हूं जहां मुझे लगता है कि इसे लागू करने के लिए प्रारंभ किया जाना चाहिए।)

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

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