स्ट्रिंग Java में एक क्लास है जो कैरेक्टर्स के सीक्वेंस को स्टोर करती है, यह java.lang पैकेज से संबंधित है। एक बार स्ट्रिंग ऑब्जेक्ट बनाने के बाद आप उन्हें मॉडिफाई नहीं कर सकते (इम्यूटेबल)।
स्टोरेज
सभी स्ट्रिंग ऑब्जेक्ट्स हीप एरिया में एक अलग मेमोरी लोकेशन में स्टोर होते हैं जिसे स्ट्रिंग कॉन्स्टेंट पूल के नाम से जाना जाता है।
जब भी आप एक स्ट्रिंग वैल्यू डिफाइन करते हैं, JVM दिए गए वैल्यू के साथ स्ट्रिंग कॉन्स्टेंट पूल में एक स्ट्रिंग ऑब्जेक्ट बनाता है। इसलिए, यदि आप उपरोक्त प्रोग्राम चलाते हैं तो स्ट्रिंग कॉन्स्टेंट पूल में दो स्ट्रिंग वैल्यूज़ बनती हैं।

intern() मेथड
यह मेथड यूनिक स्ट्रिंग वैल्यूज़ के पूल से वर्तमान स्ट्रिंग का वैल्यू लौटाता है। जब भी आप किसी विशेष स्ट्रिंग पर इस मेथड को इनवोक करते हैं, यदि स्ट्रिंग कॉन्स्टेंट पूल में पहले से ही इसके बराबर एक स्ट्रिंग मौजूद है (Object क्लास की equals मेथड के अनुसार), तो इसे लौटाया जाएगा। यदि नहीं, तो वर्तमान स्ट्रिंग को स्ट्रिंग कॉन्स्टेंट पूल में जोड़ा जाता है और इसका रेफरेंस लौटाया जाता है।
यानी यदि आप समान कंटेंट वाली दो स्ट्रिंग्स पर इस मेथड को इनवोक करते हैं तो यह गारंटी है कि वे समान मेमोरी शेयर करती हैं।
यह मेथड कई डुप्लिकेट वैल्यूज़ के मामले में मेमोरी ऑक्यूपेशन को कम करने के लिए काम आता है।
उदाहरण
निम्नलिखित में हम समान कंटेंट वाली दो स्ट्रिंग्स बना रहे हैं (new कीवर्ड का उपयोग करके) और उनकी तुलना "==" ऑपरेटर का उपयोग करके कर रहे हैं। हालांकि दोनों ऑब्जेक्ट्स का वैल्यू समान है, चूंकि वे समान ऑब्जेक्ट (मेमोरी) को रेफर नहीं करते, परिणाम false होगा।
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
लेकिन, यदि आप तुलना करने से पहले दोनों ऑब्जेक्ट्स पर intern मेथड को इनवोक करते हैं, चूंकि यह सुनिश्चित करता है कि यदि उनका कंटेंट समान है तो दोनों ऑब्जेक्ट्स समान मेमोरी शेयर करते हैं, परिणाम true होगा।
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