मैं जावास्क्रिप्ट के बारे में निश्चित नहीं हूं, लेकिन जावा में, स्ट्रिंग्स अपरिवर्तनीयता के लिए एक अतिरिक्त कदम उठाता है, "स्ट्रिंग कॉन्स्टेंट पूल" के साथ। स्ट्रिंग स्ट्रिंग शाब्दिक ( "foo"
) के साथ या एक String
क्लास कंस्ट्रक्टर के साथ निर्माण किया जा सकता है । स्ट्रिंग लिटरल्स के साथ निर्मित स्ट्रिंग्स, लगातार कॉन्स्टेंट पूल का एक हिस्सा हैं, और एक ही स्ट्रिंग शाब्दिक हमेशा पूल से एक ही मेमोरी एड्रेस होगा।
उदाहरण:
String lit1 = "foo";
String lit2 = "foo";
String cons = new String("foo");
System.out.println(lit1 == lit2); // true
System.out.println(lit1 == cons); // false
System.out.println(lit1.equals(cons)); // true
ऊपर, दोनों में lit1
और lit2
एक ही स्ट्रिंग शाब्दिक का उपयोग करके बनाया गया है, इसलिए वे एक ही मेमोरी पते पर इंगित कर रहे हैं; lit1 == lit2
में परिणाम true
, क्योंकि वे वास्तव में एक ही वस्तु हैं।
हालांकि, cons
क्लास कंस्ट्रक्टर का उपयोग करके बनाया गया है। हालांकि पैरामीटर एक ही स्ट्रिंग स्थिर है, निर्माता आबंटित करता है के लिए नए स्मृति cons
, जिसका अर्थ है cons
नहीं के रूप में एक ही वस्तु है lit1
और lit2
एक ही डेटा युक्त होने के बावजूद।
बेशक, चूंकि तीन तारों में सभी समान वर्ण डेटा होते हैं, इसलिए equals
विधि का उपयोग करके यह सच हो जाएगा।
(दोनों प्रकार के स्ट्रिंग निर्माण अपरिवर्तनीय हैं, निश्चित रूप से)