मैं वास्तव में जावा में काम करता हूं कि कैसे string interning काम करता है। जब मैं लिखता हूं:जावा में संकलन समय पर स्ट्रिंग इंटर्निंग किया जाता है?
String a = "ABC";
String b = "ABC";
if (a==b)
System.out.println("Equal");
क्या कंपाइलर संकलन समय पर स्ट्रिंग निरंतर पूल में स्ट्रिंग अक्षर "एबीसी" स्टोर करता है?
यह अजीब लगता है, क्योंकि मैंने सोचा था कि स्ट्रिंग निरंतर पूल रनटाइम पर जेवीएम द्वारा बनाया गया था, और मुझे नहीं लगता कि यह संकलन समय पर किया जाता है यदि जावा कंपाइलर JVM भी नहीं बुलाता है ।
यह संकलन समय पर नहीं किया जाता है और यह क्रम तो क्यों निम्नलिखित वापसी झूठी (this answer से लिया गया) करता है पर किया जाता है?
// But .substring() is invoked at runtime, generating distinct objects
"test" == "!test".substring(1) // --> false
यदि यह रनटाइम पर किया जाता है तो JVM क्यों नहीं समझ सकता कि वे एक ही स्ट्रिंग हैं?
मैं वास्तव में उलझन में हूं कि जावा में स्ट्रिंग इंटर्निंग कैसे काम करती है और जहां वास्तव में जावा स्ट्रिंग पूल संग्रहीत किया जाता है।
नीचे दिए गए लिंक व्यावहारिक है: http://stackoverflow.com/questions/513832/ How-do-i-compar-strings-in-java – Zyn
मुझे आपके प्रश्न के पहले भाग के बारे में निश्चित नहीं है, लेकिन 'substring' एक * नया * ऑब्जेक्ट देता है, और इसलिए दोनों तारों की सामग्री' परीक्षण से मेल खाती है ', चूंकि वे एक ही वस्तु नहीं हैं' == 'झूठी रिटर्न। –
यह संकलक है। मुझे समझ में नहीं आता कि आप क्यों कहते हैं कि यह तार स्ट्रिंग निरंतर पूल में स्ट्रिंग नहीं डाल सकता है।कंपाइलर कुछ मेमोरी लोकेशन के अंदर लगातार स्ट्रिंग रखेगा, फिर प्रोग्राम लॉन्च करते समय जेवीएम उस मेमोरी को लोड करेगा और रनटाइम पर इस्तेमाल होने वाले निरंतर पूल को बनाएगा, लेकिन पूल कंपाइलर द्वारा स्थापित किया जाएगा। – Bakuriu