2010-09-06 13 views
14

String str = new String("SOME") और String str="SOME" के बीच क्या अंतर है यह घोषणा प्रदर्शन भिन्नता प्रदान करती है।जावा स्ट्रिंग घोषणा

+0

यह भी देखें http://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly और http://stackoverflow.com/questions/390703/what-is-the-purpose-of -the-expression-new-string-in-java – polygenelubricants

उत्तर

29
String str = new String("SOME") 

हमेशा ढेर पर एक नई वस्तु बनाने

String str="SOME" 

का उपयोग करता String pool

इस छोटे से उदाहरण का प्रयास करें:

 String s1 = new String("hello"); 
     String s2 = "hello"; 
     String s3 = "hello"; 

     System.err.println(s1 == s2); 
     System.err.println(s2 == s3); 

ढेर उपयोग पर अनावश्यक वस्तुओं बनाने से बचने के लिए दूसरा फॉर्म

9

दोनों के बीच एक छोटा सा अंतर है।

दूसरा घोषणा मूल्य के लिए निरंतर SOME का मूल्य होने एक नया स्ट्रिंग बनाता चर str

पहले घोषणा करने के लिए निरंतर SOME से जुड़े संदर्भ assignates और चर str करने के लिए अपने संदर्भ assignates।

पहले मामले में, एक दूसरा स्ट्रिंग बनाया गया है जिसमें SOME है जो अधिक प्रारंभिक समय का तात्पर्य है। नतीजतन, आपको इससे बचना चाहिए। इसके अलावा, संकलन समय पर, सभी स्थिरांक SOME एक ही उदाहरण में परिवर्तित हो जाते हैं, जो बहुत कम स्मृति का उपयोग करता है।

परिणामस्वरूप, हमेशा दूसरा वाक्यविन्यास पसंद करते हैं।

+3

रिकॉर्ड के लिए, ऐसे परिदृश्य हैं जहां 'नया स्ट्रिंग (स्ट्रिंग)' समझ में आता है, जैसे कि आपके पास बहुत बड़ी स्ट्रिंग है और आप केवल एक छोटी सबस्ट्रिंग को बनाए रखने में रुचि रखते हैं । 'Substring' विधियां केवल मूल स्ट्रिंग का एक फ्लाईवेट व्यू लौटाती हैं, इसलिए 'नई स्ट्रिंग (hugeString.substring (ए, बी)) का उपयोग करके' एक प्रतिलिपि बनी हुई है और जीसी को 'विशालस्ट्रिंग' की सामग्री को पुनः प्राप्त करने देता है जब यह बाहर हो जाता है गुंजाइश। उन्हें इसे एक कन्स्ट्रक्टर नहीं बनाया जाना चाहिए था, हालांकि ... – gustafc

+0

ऑप्टिमाइज़ेशन का दिलचस्प मामला, वास्तव में, लेकिन कुछ प्रोफाइलर चेक करने से पहले मैं इस मार्ग पर नहीं जाऊंगा (तो क्या आपको लगता है)। – Riduidel

0

पहला वाला ढेर में नई स्ट्रिंग ऑब्जेक्ट बनाएगा और str इसे संदर्भित करेगा। इसके अलावा स्ट्रिंग पूल में भी शाब्दिक रखा जाएगा। इसका मतलब है कि 2 ऑब्जेक्ट्स बनाए जाएंगे और 1 संदर्भ चर होगा।

दूसरा विकल्प केवल पूल में स्ट्रिंग शाब्दिक बनाएगा और str इसे संदर्भित करेगा। तो केवल 1 ऑब्जेक्ट बनाया जाएगा और 1 संदर्भ। यह विकल्प प्रत्येक बार निष्पादित होने पर नया निर्माण करने के बजाए स्ट्रिंग पूल से हमेशा उदाहरण का उपयोग करेगा।

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