तो मैं कैथी सिएरा किताब से SCJP के लिए अध्ययन कर रहा हूँ। स्ट्रिंग्स के लिए अध्याय में, यह एक सवाल है: वसंत सर्दियों वसंत गर्मियोंक्या System.out.println में प्रयुक्त स्ट्रिंग्स भी नई अपरिवर्तनीय वस्तुएं बनाते हैं?
String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat("fall ");
s2.concat(s1);
s1 += "winter";
System.out.println(s1+" "+s2);
---------------------------
What's the output, and how many string objects and ref variables are created?
उत्पादन है और वहाँ दो संदर्भ चर है, ठीक है।
तो यह कहते हैं आठ स्ट्रिंग ऑब्जेक्ट का निर्माण होगा (वसंत, ग्रीष्म, वसंत गर्मियों ... आदि) जो कि कुछ भी नहीं होने के कारण उन्हें संदर्भित खो रहे हैं सहित देखते हैं।
हालांकि, यह पिछले sysout से कुछ भी शामिल नहीं है।
मेरा प्रश्न कर रहे हैं एक स्थान के साथ concat जा रहा है, यह भी नई वस्तुओं का निर्माण नहीं करता कोड की अंतिम पंक्ति में है, एस 1 और एस 2 के बाद से? या यह बस प्रदर्शन के लिए स्ट्रिंग बफर को पास किया जाएगा, और नई वस्तुओं को नहीं बनाया जाएगा?
यह स्पष्ट रूप से बहुत ही बुनियादी है और मैं कहीं और देखा लेकिन कुछ भी सीधे इस जवाब दे दिया। मेरी समझ से, इसे वहां नई वस्तुओं को भी बनाना चाहिए, लेकिन मुझे परीक्षा के लिए निश्चित होना चाहिए! विचार?
धन्यवाद, अग्रिम में!
ऊपर दिए गए कोड को संकलित करें, इसे 'javap -c' पर फ़ीड करें, और यह जांचें कि यह किस बाइटकोड को संकलित करता है। एक अंतर्निहित 'स्ट्रिंगबफर' होना चाहिए जो अंततः 'toString()' पर कॉल किया जाता है, जिसे प्रश्न का उत्तर देना चाहिए। – millimoose
(इसके अलावा, प्रश्न प्रमाणन के साथ गलत सब कुछ की तरह है। संदर्भ चर के लिए इसका मतलब क्या है * बनाया गया *? वे एक संकलित समय निर्माण कर रहे हैं, उन्हें सबसे अच्छी तरह घोषित किया गया है। अस्पष्टता भी उत्पन्न हो रही है जब स्ट्रिंग अक्षर तैयार किए जाते हैं - वे निश्चित रूप से स्ट्रिंग मैनिपुलेशन ऑपरेशंस के परिणामों की तुलना में पहले बनाए जाते हैं।) – millimoose
@ मिलिमुओज़ मुझे लगता है कि उन प्रश्नों को ऑब्जेक्ट इंस्टेंटेशन, जेवीएम और स्ट्रिंग स्थिरांक के आपके ज्ञान का परीक्षण करने के लिए डिज़ाइन किया गया है - सभी मान्य क्षेत्र :) – vikingsteve