एक स्ट्रिंग जावा में एक वर्ग है जो वर्णों के अनुक्रम को संग्रहीत करता है, यह java.lang से संबंधित है पैकेट। एक बार जब आप एक स्ट्रिंग ऑब्जेक्ट बना लेते हैं तो आप उन्हें (अपरिवर्तनीय) संशोधित नहीं कर सकते।
संग्रहण
सभी स्ट्रिंग ऑब्जेक्ट्स को हीप क्षेत्र में एक अलग मेमोरी लोकेशन में संग्रहीत किया जाता है, जिसे स्ट्रिंग कॉन्स्टेंट पूल के रूप में जाना जाता है। ।
जब भी आप स्ट्रिंग मान को परिभाषित करते हैं तो JVM स्ट्रिंग निरंतर पूल में दिए गए मान के साथ एक स्ट्रिंग ऑब्जेक्ट बनाता है। इसलिए, यदि आप उपरोक्त प्रोग्राम चलाते हैं तो स्ट्रिंग स्थिरांक पूल में दो स्ट्रिंग मान बन जाते हैं।
इंटर्न () विधि
यह विधि अद्वितीय स्ट्रिंग मानों के पूल से वर्तमान स्ट्रिंग का मान लौटाती है। जब भी आप किसी विशेष स्ट्रिंग पर इस विधि का आह्वान करते हैं, यदि स्ट्रिंग स्थिरांक पूल में पहले से ही इसके बराबर एक स्ट्रिंग है (ऑब्जेक्ट वर्ग की बराबर विधि के अनुसार), तो इसे वापस कर दिया जाएगा। यदि नहीं, तो वर्तमान स्ट्रिंग को एक संदर्भ लौटाते हुए स्ट्रिंग स्थिरांक पूल में जोड़ा जाता है।
यानी यदि आप इस विधि को समान सामग्री वाले दो स्ट्रिंग्स पर लागू करते हैं तो यह गारंटी है कि वे समान मेमोरी साझा करते हैं।
कई डुप्लिकेट मानों के मामले में कब्जा की गई मेमोरी को कम करने के लिए यह विधि काम आती है।
उदाहरण
निम्नलिखित में हम एक ही सामग्री के साथ दो स्ट्रिंग्स (नए कीवर्ड का उपयोग करके) बना रहे हैं और उनकी तुलना "==" ऑपरेटर के उपयोग से कर रहे हैं। हालांकि दोनों वस्तुओं का मूल्य समान है, क्योंकि वे एक ही वस्तु (मेमोरी) को संदर्भित नहीं करते हैं, परिणाम गलत होगा।
public class InternExample { public static void main(String args[]) { String str1 = new String("Hello"); str1 = str1.intern(); String str2 = "Hello"; str2 = str2.intern(); System.out.println(str1.equals(str2)); } }
आउटपुट
false
लेकिन, यदि आप दोनों वस्तुओं की तुलना करने से पहले उन पर इंटर्न विधि लागू करते हैं, क्योंकि यह सुनिश्चित करता है कि दोनों वस्तुओं की समान स्मृति है, यदि उनकी सामग्री समान है, तो परिणाम सही होगा।
public class InternExample { public static void main(String args[]) { String str1 = new String("Hello"); str1 = str1.intern(); String str2 = new String("Hello"); str2 = str2.intern(); System.out.println(str1==str2); } }
आउटपुट
true