आइए कदम:
SomeObject so1 = new SomeObject("some property value");
... क्योंकि आप एक नया स्ट्रिंग बना रहे हैं, और अधिक जटिल की तुलना में यह लग रहा है वास्तव में है। यह रूप में सोचने के लिए आसान हो सकता है:
String tmp = new String("some property value");
SomeObject so1 = new SomeObject(tmp);
// Not that you would normally write it in this way.
(बिल्कुल सटीक होना करने के लिए - इन वास्तव में समान नहीं होते हैं मूल में 'नए स्ट्रिंग' संकलन समय पर बनाया है और .class छवि का हिस्सा है।। आप इसे एक प्रदर्शन हैक के रूप में सोच सकते हैं।)
तो, पहले जेवीएम स्ट्रिंग के लिए स्थान आवंटित करता है। आप आमतौर पर स्ट्रिंग कार्यान्वयन के आंतरिक के बारे में नहीं जानते या उनकी परवाह नहीं करते हैं, इसलिए बस इसे विश्वास पर लें कि "कुछ संपत्ति मूल्य" का प्रतिनिधित्व करने के लिए स्मृति का एक हिस्सा उपयोग किया जा रहा है। साथ ही, आपके पास कुछ स्मृति अस्थायी रूप से आवंटित है जिसमें स्ट्रिंग का संदर्भ शामिल है। दूसरे रूप में, इसे स्पष्ट रूप से tmp
कहा जाता है; आपके मूल रूप में जावा इसे नाम दिए बिना संभालता है।
अगला JVM एक नए SomeObject के लिए स्थान आवंटित करता है। जावा की आंतरिक बहीखाता और ऑब्जेक्ट के प्रत्येक फ़ील्ड के लिए जगह के लिए यह कुछ जगह है। इस मामले में, केवल एक फ़ील्ड है, strSomeProperty
।
ध्यान रखें कि strSomeProperty
केवल एक स्ट्रिंग का संदर्भ है। अभी के लिए, इसे शून्य करने के लिए शुरू किया जाएगा।
अगला, निर्माता को निष्पादित किया जाता है।
this.strSomeProperty = strSomeProperty;
यह सब करता है स्ट्रिंग के लिए संदर्भ कॉपी, अपने strSomeProperty
क्षेत्र में है।
अंत में, ऑब्जेक्ट संदर्भ so1
के लिए स्थान आवंटित किया गया है। यह SomeObject के संदर्भ के साथ सेट है।
so2
बिल्कुल वैसे ही काम करता है।
नहीं, यह और अधिक जटिल की तुलना में यह लग रहा है नहीं है। "ए" और नया स्ट्रिंग ("ए") बराबर अभिव्यक्ति नहीं है। स्ट्रिंग अक्षरक संकलक द्वारा प्रशिक्षित होते हैं। जब वे उपयोग किए जाते हैं तो वे अतिरिक्त ढेर आवंटन नहीं करते हैं। – bendin
http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5 – bendin
टच :) हालांकि मुझे लगता है कि इंटर्निंग मैंने जो भी लिखा है उससे कहीं अधिक जटिल है। मुझे लगता है कि उचित उत्तर प्रश्न के इरादे पर निर्भर करता है। – slim