5

चूंकि, जावा में, स्ट्रिंग्स को Object के संदर्भ के रूप में कार्यान्वित किया जाता है। इसके अलावा, स्ट्रिंग constants ऑब्जेक्ट्स के रूप में लागू किए गए हैं।स्ट्रिंग ऑब्जेक्ट्स के लिए मेमोरी आवंटन?

उदाहरण के लिए:

System.out.println("This is a String"); 

ऊपर बयान में यह भी प्रकार वस्तु के रूप में कार्यान्वित किया जाता है "यह एक स्ट्रिंग है।" यह मतलब है कि यह स्मृति जो एक ही

String str = "This is a String"; 

के रूप में मेरा प्रश्न क्या है अगर मैं एक ही System.out बयान इस तरह में + ऑपरेटर का उपयोग कर कई स्ट्रिंग्स मुद्रित होगा आवंटित किया जाएगा,

System.out.println("This is a String" + "This is another String"); 

अब मैं क्या मूल रूप से पूछ रहा हूं कि मैं जानना चाहता हूं कि "This is a String" और "This is another String" अलग-अलग मेमोरी रिक्त स्थान या समान मेमोरी स्पेस ले जाएगा ??

इसके अलावा, println() कथन में स्ट्रिंग्स के बीच एक चर के अतिरिक्त एक अंतर बनाता है?

उदाहरण के लिए:

int i = 10; 
System.out.println("This is a String" + i + "This is another String"); 

अन्य इस साइट पर तार से संबंधित प्रश्नों के मेरे सवाल का जवाब नहीं है specifically.Please इस सवाल^_^

किसी भी मदद की सराहना की

किया जाएगा पर प्रकाश डाला

उत्तर

6

मैं मूल रूप से पूछ रहा हूं कि मैं जानना चाहता हूं कि "This is a String" और "This is another String" अलग-अलग मेमोरी रिक्त स्थान या समान स्मृति स्थान ले जाएगा ??

यहाँ दोनों String, स्थिरांक हैं और इतने संकलन समय पर वे concatenated होगा एक एकलString"This is a StringThis is another String" स्ट्रिंग पूल में बनाने के लिए किया जाएगा।

System.out.println ("यह एक स्ट्रिंग है" + i + "यह एक और स्ट्रिंग है");

वास्तविक उत्पादन String रन टाइम पर निर्धारित किया जाता है, तो यह ढेर क्षेत्र में विभिन्न String रों पैदा करेगा।

जावा प्रलेखन से: String

जावा भाषा स्ट्रिंग संयोजन ऑपरेटर (+), और तार करने के लिए अन्य वस्तुओं के रूपांतरण के लिए के लिए विशेष सहायता प्रदान करता है। स्ट्रिंग कॉन्सटेनेशन StringBuilder (या StringBuffer) कक्षा और इसकी संलग्न विधि के माध्यम से लागू किया गया है। स्ट्रिंग रूपांतरण विधि toString के माध्यम से लागू किया गया है, जिसे ऑब्जेक्ट द्वारा परिभाषित किया गया है और जावा में सभी वर्गों द्वारा विरासत में मिला है।

2

, के बाद से जावा में, तार प्रकार Object.Also के संदर्भ के रूप में लागू किया जाता है, स्ट्रिंग स्थिरांक वस्तुओं के रूप में लागू कर रहे हैं।

नहीं, जावा तारों में स्ट्रिंग ऑब्जेक्ट्स के रूप में लागू किया गया है। जो, निश्चित रूप से, वस्तुएं हैं। और आंतरिक रूप से वस्तुओं को संदर्भ द्वारा छेड़छाड़ की जाती है। और स्ट्रिंग स्थिरांक स्ट्रिंग के रूप में फिर से कार्यान्वित किए जाते हैं।

"This is a String" + "This is another String" के संबंध में

, मुझे यकीन है कि नहीं कर रहा हूँ कि क्या जावा भाषा विशिष्टता जनादेश compilers कि एक विशिष्ट तरीके से इस संभाल चाहिए, लेकिन आप सुरक्षित रूप से किसी भी आधे रास्ते सभ्य संकलक संकलन समय, इसका मतलब है जिसके दौरान इस मूल्यांकन करने के लिए उम्मीद कर सकते हैं यह संभवत: "This is a StringThis is another String" के बराबर हो होगा।

स्ट्रिंग स्थिरांक के बीच एक चर के अलावा निश्चित रूप से करता है एक फर्क है, क्योंकि अब अभिव्यक्ति संकलन समय के दौरान मूल्यांकन नहीं किया जा सकता है, तो दो अलग-अलग स्ट्रिंग वस्तुओं, "This is a String" और एक अन्य के लिए एक संकलक द्वारा उत्पन्न करना होगा "This is another String" के लिए। (जब तक, ज़ाहिर है, i एक निरंतर हो सकता है, होता है जिस स्थिति में यह अभी भी संकलन समय के दौरान मूल्यांकन किया जा सकता।)

लेकिन मेरा सुझाव है कि इन सभी के प्रदर्शन पर नगण्य प्रभाव के साथ तकनीकी के तुच्छ कर रहे हैं, तो भले ही यह जानना एक अच्छी बात है कि वे कैसे काम करते हैं, यह अच्छी बात नहीं है कि इस ज्ञान को आपको कोड करने और कोड को समझने के लिए सबसे स्वाभाविक रूप से प्रोग्राम करने के लिए मजबूर करने के लिए मजबूर होना चाहिए।

+1

यह अनिवार्य है। – EJP

+0

@EJP धन्यवाद। –

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