चूंकि जावा में स्ट्रिंग्स अपरिवर्तनीय हैं, इसलिए मैंने स्ट्रिंग्स को संयोजित करने के लिए हमेशा स्ट्रिंगबिल्डर या स्ट्रिंगबफर का उपयोग किया है। क्या String.format() विधि इस समस्या के साथ-साथ स्ट्रिंगबिल्डर या स्ट्रिंगबफर को संभालती है? दूसरे शब्दों में, क्या स्ट्रिंग.फॉर्मैट() मेमोरी के साथ-साथ स्ट्रिंगबफर या स्ट्रिंगबिल्डर का प्रबंधन करता है?जावा में, स्ट्रिंग्सफॉर्मैट() के कार्यान्वयन में विचार की गई स्ट्रिंग्स की अपरिवर्तनीयता है?
उत्तर
ओरेकल JDK के स्रोत कोड के आधार पर यह कार्यान्वयन प्रत्येक String#format
कॉल जो बदले में प्रत्येक कॉल के लिए एक ताजा StringBuilder
आवंटित के लिए एक नया Formatter
बनाता है कि लगता है। तो हाँ। लेकिन जैसा कि आपके प्रश्न पर टिप्पणी के अनुसार उल्लेख किया गया है, यह बहुत अधिक कार्यान्वयन विशिष्ट है, हालांकि सामान्य ज्ञान यह है कि यह चीजों को करने का सबसे प्रभावी तरीका चुनता है।
दिलचस्प, धन्यवाद! तो एक फॉलो-अप के रूप में, चूंकि स्ट्रिंगबिल्डर थ्रेड-सुरक्षित नहीं है, इसलिए मुझे लगता है कि स्ट्रिंग.फॉर्मैट() थ्रेड-सुरक्षित भी नहीं है ... कम से कम ओरेकल कार्यान्वयन? – fooMonster
यदि प्रारूप में प्रत्येक कॉल एक नया स्ट्रिंगबिल्डर बनाता है और इसे विधि में स्थानीय रखता है, तो प्रारूप में कॉल अभी भी थ्रेड सुरक्षित हो सकता है। –
@ माइकल "अभी भी धागा सुरक्षित हो सकता है"? ऐसा लगता है कि आप यह कह रहे हैं कि डेवलपर स्ट्रिंग.फॉर्मैट() को थ्रेड-सुरक्षित तरीके से कॉल करके इसे थ्रेड-सुरक्षित बना सकता है। स्पष्ट रूप से। शायद मैं स्पष्ट नहीं हो रहा हूँ। अनुवर्ती, साथ ही साथ मूल प्रश्न String.format() के कार्यान्वयन के संबंध में था। तो मेरा फॉलोअप बेहतर होगा क्योंकि "स्ट्रिंग.फॉर्मैट() के कार्यान्वयन के बाद ऑरैक कार्यान्वयन में स्ट्रिंगबिल्डर पर निर्भर करता है, और चूंकि हम जानते हैं कि स्ट्रिंगबिल्डर थ्रेड-सुरक्षित नहीं है, इसका मतलब यह है कि स्ट्रिंग.फॉर्मैट() का कार्यान्वयन ओरेकल के जेडीके में थ्रेड-सुरक्षित भी नहीं है? " – fooMonster
(1) यह कार्यान्वयन-विशिष्ट है। (2) यह तब तक पर्याप्त काम करता है जब तक आपके पास डेटा न हो जो दिखाता है कि यह अच्छी तरह से काम नहीं करता है, इस पर ध्यान दिए बिना कि यह कैसे कार्यान्वित किया जाता है। (3) जैसा कि 2 में संकेत दिया गया है, और हमेशा * इस तरह के प्रश्नों के साथ, सुनिश्चित करने का एकमात्र तरीका प्रोफ़ाइल है। – delnan