2012-01-04 13 views

उत्तर

25

जावा कम्पाइलर पढ़ें यह StringBuilder में तब्दील दोहराया स्ट्रिंग संयोजन के प्रदर्शन को बढ़ाने के लिए होगा। http://java.sun.com/docs/books/jls/third%5Fedition/html/expressions.html#15.18.1.2

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

+0

इस [लेख] के बारे में क्या है (http://www.pellegrino.link/2015/08/22/string-concatenation-with-java-8.html)? – gaheinrichs

+0

"जब आप लूप कंपाइलर में संयोजित होते हैं तो स्ट्रिंगबिल्डर को स्वयं से प्रतिस्थापित नहीं किया जा सकता है, जब आपको कॉन्सटेनेशन से स्ट्रिंगबिल्डर" – user765635

+0

_ पर विचार करना चाहिए, जब आप लूप में सम्मिलित होते हैं ** कि ** कंपाइलर स्ट्रिंगबिल्डर को प्रतिस्थापित नहीं कर सकता अपने आप। ऐसा तब होता है जब आपको ** StringBuilder_ का उपयोग करके ** ** को concatenation से ** स्विचिंग पर विचार करना चाहिए – Trunk

3

यह होगा अधिक पठनीय अगर आप का उपयोग StringBuilder/StringBuffer (आपके ऐप्लिकेशन धागा मॉडल के आधार पर चयन)

यदि आप लिखना

String str = "abc"; 
    str+="def"; 

आंतरिक यह एक ही

के लिए StringBuilder पैदा करेगा
7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V 
    10: aload_1 
    11: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 
    14: ldC#6; //String def 
    16: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 
    19: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 
    22: astore_1 
1

(कल्पना करें कि यह बड़ा है एर) ...

स्ट्रिंग "+" ऑपरेटर का उपयोग कर संयोजन कई अस्थायी वस्तुओं बनाता है और कचरा संग्रहण बढ़ जाती है। स्ट्रिंगबफर वर्ग का उपयोग करना अधिक कुशल है।

अधिक यहाँ: http://www.ibm.com/developerworks/websphere/library/bestpractices/string_concatenation.html

StringBuffer strBuf = new StringBuffer(); 
strBuf.append("this"); 
strBuf.append("is"); 
strBuf.append("my"); 
strBuf.append("string"); 
strBuf.append("and"); 
strBuf.append(this.methodCall()); 
strBuf.append(" answer "); 
strBuf.append("is : "); 
strBuf.append(count); 

संबंधित हो सकता है: String concatenation: concat() vs "+" operator

+0

हां, लेकिन क्या यह मामला तभी होता है जब आप एक लूप में एक स्ट्रिंग बनाने के बजाय एक लूप में संगत हो रहे हों? –

+0

क्या अंतर है? स्ट्रिंगबफर का उपयोग करें यदि आप कई concatenation – JohnJohnGa

+3

उद्धरण [आपके स्रोत] (http://www.ibm.com/developerworks/websphere/library/bestpractices/string_concatenation.html) हमेशा सहायक होते हैं। –

1

आप स्ट्रिंग संयोजन से अधिक StringBuilder को प्राथमिकता देनी चाहिए, जब से तुम विधि कॉल और चर तार को जोड़ा जा रहा है।

हालांकि, "यह" और "है" जैसी सरल स्ट्रिंग्स की मात्रा प्रदर्शन पर कोई प्रभाव नहीं डालती है, क्योंकि संकलक प्रभावी रूप से उन्हें संसाधित करेगा और इंटीग्रेटेड स्ट्रिंग्स बना देगा जो बाइटकोड में समाप्त हो जाएंगे। ऐसा करने के बाद, स्ट्रिंग्स का उल्लेख करने वाले अंतिम प्रदर्शन पर कोई ओवरहेड नहीं होगा।

2

Relatively new article with graph, दिखा रहा है कि '+' स्केल के साथ संगतता बहुत भयंकर है। और जैसा कि एक और जवाब में बताया गया है, स्ट्रिंगबिल्डर शायद अधिक पठनीय होगा।

1

मुझे नहीं लगता कि यह स्ट्रिंग लिखे जाने पर प्रदर्शन में कोई फर्क पड़ता है - संकलक इसे वैसे भी अनुकूलित करेगा।

4

नहीं, यह ठीक है। यदि आप सूर्य के जावा 6 कंपाइलर का उपयोग करते हैं तो यह वास्तव में स्ट्रिंगबिल्डर का उपयोग करेगा।

इस article

4

स्ट्रिंगबफर के लिए जावाडोक जावा 5 से राज्य करता है।0

स्ट्रिंगबिल्डर वर्ग को आम तौर पर इस तरह के वरीयता में उपयोग किया जाना चाहिए, क्योंकि यह सभी समान संचालन का समर्थन करता है लेकिन यह तेज़ है, क्योंकि यह सिंक्रनाइज़ेशन नहीं करता है।

संकलक

String myString = "this is my stringand " + this.methodCall() + " answer is : " + count; 

लेखन जो के रूप में

String myString = new StringBuilder().append("this is my stringand ").append(methodCall()).append(" answer is : ").append(count).toString(); 

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