String str = new String("SOME")
और String str="SOME"
के बीच क्या अंतर है यह घोषणा प्रदर्शन भिन्नता प्रदान करती है।जावा स्ट्रिंग घोषणा
उत्तर
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);
ढेर उपयोग पर अनावश्यक वस्तुओं बनाने से बचने के लिए दूसरा फॉर्म
दोनों के बीच एक छोटा सा अंतर है।
दूसरा घोषणा मूल्य के लिए निरंतर SOME
का मूल्य होने एक नया स्ट्रिंग बनाता चर str
पहले घोषणा करने के लिए निरंतर SOME
से जुड़े संदर्भ assignates और चर str
करने के लिए अपने संदर्भ assignates।
पहले मामले में, एक दूसरा स्ट्रिंग बनाया गया है जिसमें SOME
है जो अधिक प्रारंभिक समय का तात्पर्य है। नतीजतन, आपको इससे बचना चाहिए। इसके अलावा, संकलन समय पर, सभी स्थिरांक SOME
एक ही उदाहरण में परिवर्तित हो जाते हैं, जो बहुत कम स्मृति का उपयोग करता है।
परिणामस्वरूप, हमेशा दूसरा वाक्यविन्यास पसंद करते हैं।
रिकॉर्ड के लिए, ऐसे परिदृश्य हैं जहां 'नया स्ट्रिंग (स्ट्रिंग)' समझ में आता है, जैसे कि आपके पास बहुत बड़ी स्ट्रिंग है और आप केवल एक छोटी सबस्ट्रिंग को बनाए रखने में रुचि रखते हैं । 'Substring' विधियां केवल मूल स्ट्रिंग का एक फ्लाईवेट व्यू लौटाती हैं, इसलिए 'नई स्ट्रिंग (hugeString.substring (ए, बी)) का उपयोग करके' एक प्रतिलिपि बनी हुई है और जीसी को 'विशालस्ट्रिंग' की सामग्री को पुनः प्राप्त करने देता है जब यह बाहर हो जाता है गुंजाइश। उन्हें इसे एक कन्स्ट्रक्टर नहीं बनाया जाना चाहिए था, हालांकि ... – gustafc
ऑप्टिमाइज़ेशन का दिलचस्प मामला, वास्तव में, लेकिन कुछ प्रोफाइलर चेक करने से पहले मैं इस मार्ग पर नहीं जाऊंगा (तो क्या आपको लगता है)। – Riduidel
पहला वाला ढेर में नई स्ट्रिंग ऑब्जेक्ट बनाएगा और str इसे संदर्भित करेगा। इसके अलावा स्ट्रिंग पूल में भी शाब्दिक रखा जाएगा। इसका मतलब है कि 2 ऑब्जेक्ट्स बनाए जाएंगे और 1 संदर्भ चर होगा।
दूसरा विकल्प केवल पूल में स्ट्रिंग शाब्दिक बनाएगा और str इसे संदर्भित करेगा। तो केवल 1 ऑब्जेक्ट बनाया जाएगा और 1 संदर्भ। यह विकल्प प्रत्येक बार निष्पादित होने पर नया निर्माण करने के बजाए स्ट्रिंग पूल से हमेशा उदाहरण का उपयोग करेगा।
- 1. ऐरे स्ट्रिंग घोषणा
- 2. सी ++ स्ट्रिंग घोषणा
- 3. मेवेन + जावा पैकेज घोषणा
- 4. जावा जेनेरिक विधि घोषणा
- 5. अजीब स्ट्रिंग सरणी घोषणा सिंटेक्स
- 6. जावा - ऑब्जेक्ट घोषणा और प्रारंभिकरण
- 7. @interface जावा में डिफ़ॉल्ट घोषणा उपयोग
- 8. जावा में ArrayList या सूची घोषणा
- 9. जावा स्विच: परिवर्तनीय घोषणा और दायरा
- 10. जावा सरणियों के बाद आरंभ की घोषणा
- 11. जावा: स्ट्रिंग
- 12. जावा: स्ट्रिंग
- 13. जावा स्ट्रिंग
- 14. जावा स्ट्रिंग
- 15. जावा स्ट्रिंग
- 16. जावा उपयोगकर्ता एजेंट स्ट्रिंग पार्सर
- 17. स्ट्रिंग इंटर्निंग की खोज लागत और शाब्दिक तारों की घोषणा
- 18. स्थैतिक घोषणा गैर स्थैतिक घोषणा
- 19. दोस्त घोषणा आगे की घोषणा
- 20. न्यू पीएचपी करने के लिए - की घोषणा डेटाबेस कनेक्शन स्ट्रिंग
- 21. स्ट्रिंग के लिए XDocument: घोषणा में एन्कोडिंग को कैसे छोड़ें?
- 22. PHP सीएसएस पार्सर - स्ट्रिंग करने के लिए चयनकर्ता घोषणा
- 23. संरचना घोषणा: घोषणा में वैध प्रारंभकर्ता?
- 24. जावा: स्ट्रिंग प्रस्तुति
- 25. जावा स्ट्रिंग concatenation दक्षता
- 26. जावा स्ट्रिंग या प्रारूप
- 27. जावा: NamedQuery स्ट्रिंग समस्या
- 28. जावा रेगेक्स - स्ट्रिंग
- 29. जावा स्ट्रिंग कॉन्स्टेंट पूल
- 30. जावा में स्ट्रिंग पुल
यह भी देखें 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