आपके छोटे उदाहरण में, कोई भी नहीं क्योंकि संकलक स्ट्रिंग concatenation करने के लिए StringBuilder
का उपयोग करता है। यदि एक लूप में समामेलन हुआ, हालांकि, कंपाइलर कई StringBuilder
और String
ऑब्जेक्ट्स बना सकता है। उदाहरण के लिए:
String s= "" ;
for(int i= 0 ; i < 10 ; i++)
s+= "a" ;
हर बार ऊपर लाइन 3 निष्पादित किया जाता है, एक StringBuilder
वस्तु बन जाता है, s
की सामग्री को संलग्न, "एक" संलग्न है, और फिर StringBuilder
एक स्ट्रिंग में s
वापस करने के लिए सौंपा जा में बदल जाती है । कुल 10 StringBuilder
एस और 10 String
एस।
इसके विपरीत,
StringBuilder sb= new StringBuilder() ;
for(int i= 0 ; i < 10 ; i++)
sb.append("a");
String s= sb.toString() ;
में केवल 1 StringBuilder
और 1 String
बनाई गई हैं।
इसका मुख्य कारण यह है कि संकलक यह समझने के लिए पर्याप्त स्मार्ट नहीं हो सकता कि पहला पाश दूसरे के बराबर है और अधिक कुशल (बाइट) कोड उत्पन्न करता है। अधिक जटिल मामलों में, स्मार्टस्टाइल को जानने के लिए भी असंभव है। यदि आपको बिल्कुल इस अनुकूलन की आवश्यकता है, तो आपको स्पष्ट रूप से StringBuilder
एस का उपयोग कर इसे मैन्युअल रूप से पेश करना होगा।
स्रोत
2013-08-26 21:40:42
आपके मामूली उदाहरण में, कोई लाभ नहीं हो सकता है। स्ट्रिंगबिल्डर उपयोगी हैं क्योंकि, जब आप + के साथ मिलते हैं तो आप हर बार ब्रांड नए स्ट्रिंग बनाते हैं। स्ट्रिंगबिल्डर बड़ी संख्या में तारों को संगत करने के लिए अधिक कुशल है। –