2016-03-23 4 views
12

क्या जावा स्ट्रिंग वेरिएबल का उपयोग करके जावा बनाम private final static String का उपयोग करके कोई प्रदर्शन लाभ होता है जिसे विधि को हर बार "प्रारंभिक" प्राप्त करना होता है?जावा स्ट्रिंग्स: निजी स्थैतिक बनाम स्थानीय परिवर्तनीय प्रदर्शन

मुझे लगता है कि private static final तारों का उपयोग करना स्थिरांक के लिए एक अच्छा अभ्यास है जो कक्षा के विभिन्न हिस्सों में पुन: उपयोग किया जाता है, हालांकि यदि एक स्ट्रिंग का उपयोग केवल एक ही तरीके से किया जाना चाहिए, एक ही विशिष्ट कारण के लिए कोई अन्य विधि इस बारे में चिंतित नहीं है, मैं वास्तव में वर्ग के आंतरिक इंटरफ़ेस को कम निजी सदस्यों के साथ साफ रखना पसंद करता हूं, और केवल स्थानीय चर का उपयोग करता हूं।

यह देखते हुए कि जावा स्ट्रिंग इंटर्निंग कर रहा है, और वास्तव में उद्धरण (String s = "some string") का उपयोग करके घोषित प्रत्येक स्ट्रिंग की एक प्रति के साथ पूल रखता है, वास्तव में प्रत्येक को वैरिएबल घोषित/प्रारंभ/असाइन करने के लिए प्रदर्शन हिट होगा एक स्थिर स्ट्रिंग का उपयोग कर विधि का उपयोग कर सकते हैं?

इसे थोड़ा और स्पष्ट करने के लिए, SS या LS का उपयोग करने के बीच कोई अंतर होगा?

class c { 
private final static String SS = "myString"; 

    private void method(){ 
    //do something with SS 
    } 

    private void OtherMethod(){ 
    String LS = "myOtherString" 
    //do same thing with LS 
    } 
} 
+1

"* प्रत्येक अलग स्ट्रिंग की एक प्रति के साथ पूल रखता है *" यह गलत है। केवल जावा स्ट्रिंग्स (जब तक आप 'String.intern() 'कॉल नहीं करते हैं) आपके कोड में' quot "उद्धृत हैं। रनटाइम पर निर्मित स्ट्रिंग्स * नहीं * स्थिरांक पूल में प्रशिक्षित हैं। – dimo414

+0

आप सही हैं, जिनके बारे में मैं बात कर रहा था, मैं –

उत्तर

7

एक स्थिर स्थिरता का उपयोग रखरखाव के लिए बेहतर होने की संभावना है। हालांकि संकलन समय पर ज्ञात स्थिरांक को इस मामले में रेखांकित किया जा सकता है कि इस मामले में कोई अंतर होने की संभावना नहीं है।

नोट: यदि आप स्ट्रिंग अक्षर का उपयोग कर रहे हैं, तो यह केवल एक बार बनाया जाएगा, इससे कोई फर्क नहीं पड़ता कि जेवीएम में इसका उपयोग क्यों किया जाता है।

इस मामले में केवल अंतर एक स्थानीय चर का उपयोग स्टैक पर कर रहा है जो कि स्थिरता की तुलना में कहीं अधिक महंगी होने की संभावना नहीं है। केवल एक बार घोषित

वहाँ वास्तव में चर हर बार विधि

के रूप में जावा एक स्थिर संकलक का उपयोग करता पहुँचा जा सकता है की घोषणा करने के होने से एक प्रदर्शन हिट गाना बन गया, एक चर रहा है (या के लिए एक बार संकलन के प्रत्येक चरण), कक्षा/विधि को लोड करते समय, चाहे कितनी बार विधियों को बुलाया जाता है। हालांकि प्रत्येक बार वैरिएबल शुरू किया जा सकता है।

2

सच है, अंत में, वहाँ कोई अंतर नहीं है। स्थानीय चर में एक स्थिर स्ट्रिंग अभी भी निरंतर पूल में समाप्त हो जाएगी और अनुकूलित हो जाएगी। तो आम तौर पर बोलते हुए, स्थानीय चर तेजी से होते हैं क्योंकि उन्हें एक्सेस करना आसान होता है, लेकिन निरंतर तारों के मामले में इससे कोई फर्क नहीं पड़ता है। तो अपने मामले में जो भी अधिक पठनीय और सहज ज्ञान युक्त है चुनें।

+2

संपादित करूँगा क्यों आप का मतलब है कि स्थानीय चर स्थिरता से तेज हैं ??? –

+0

@Xoce 웃 Пepeúpa एक स्थानीय चर गैर-अंतिम 'स्थिर 'फ़ील्ड तक पहुंचने से थोड़ा तेज़ होने की संभावना है। हालांकि स्थिरांक को रेखांकित किया जा सकता है, इसलिए अंतर भिन्न है। –

+0

एक लोक्लर चर बहुत अच्छी तरह से अनुकूलित किया जा सकता है। कुछ मामलों में इसे समाप्त किया जा सकता है। दूसरों में इसे बहुत तेज निर्देशों का उपयोग करके एक्सेस किया जा सकता है जो स्टैक या बेस पॉइंटर से संबंधित काम करते हैं। स्थैतिक चर को हमेशा अपने पूर्ण पते का उपयोग करके एक्सेस किया जाना चाहिए – loonytune

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