একটি String জাভাতে একটি ক্লাস যা ক্যারেক্টার সিকোয়েন্স স্টোর করে, এটি java.lang প্যাকেজের অন্তর্গত। একবার আপনি একটি String অবজেক্ট তৈরি করলে আপনি এটিকে মডিফাই করতে পারবেন না (ইমিউটেবল)।
স্টোরেজ
সব String অবজেক্ট হিপ এলিয়ার的一個 পৃথক মেমরি লোকেশনে স্টোর থাকে যাকে String Constant Pool বলা হয়।
যখনই আপনি একটি স্ট্রিং ভ্যালু ডিফাইন করেন, JVM দেয়া ভ্যালু দিয়ে String Constant Pool-এ একটি String অবজেক্ট তৈরি করে। তাই, আপনি উপরের প্রোগ্রাম রান করলে String Constant Pool-এ দুটি স্ট্রিং ভ্যালু তৈরি হবে।

intern() মেথড
এই মেথড বর্তমান স্ট্রিং-এর ভ্যালু ইউনিক স্ট্রিং ভ্যালুগুলোর পুল থেকে রিটার্ন করে। যখনই আপনি এই মেথডটি একটি নির্দিষ্ট স্ট্রিং-এ আহ্বান করেন, যদি String Constant Pool-এ ইতিমধ্যে এটির সমান একটি স্ট্রিং থাকে (Object ক্লাসের equals মেথড অনুযায়ী), তবে সেটি রিটার্ন হবে। যদি না থাকে, তবে বর্তমান স্ট্রিং String Constant Pool-এ যোগ হবে এবং এর একটি রেফারেন্স রিটার্ন হবে।
অর্থাৎ, আপনি যদি এই মেথডটি একই কন্টেন্টের দুটি স্ট্রিং-এ আহ্বান করেন তবে গ্যারান্টি করা হয় যে তারা একই মেমরি শেয়ার করবে।
এই মেথড ডুপ্লিকেট ভ্যালু থাকলে মেমরি অকিউপেশন কমাতে খুব কাজে আসে।
উদাহরণ ১ (intern() ছাড়া)
নিচে আমরা new কিওয়ার্ড ব্যবহার করে একই কন্টেন্টের দুটি স্ট্রিং তৈরি করছি এবং "==" অপারেটর দিয়ে তুলনা করছি। যদিও দুটি অবজেক্টের একই ভ্যালু, যেহেতু তারা একই অবজেক্ট (মেমরি) রেফার করে না, ফলাফল false হবে।
public class InternExample {
public static void main(String args[]) {
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);
}
}
আউটপুট: false
উদাহরণ ২ (intern() সহ)
কিন্তু, আপনি যদি দুটি অবজেক্টে 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
সারসংক্ষেপ: intern() স্ট্রিং ইন্টার্নিং এর জন্য ব্যবহৃত হয়। লিটারেল স্ট্রিং (`"Hello"`) অটোমেটিক্যালি ইন্টার্নড হয়। `new String()` দিয়ে তৈরি স্ট্রিং হিপে থাকে, `intern()` কল করলে পুলে যাবে/রেফারেন্স পাবে। মেমরি অপ্টিমাইজেশনের জন্য বড় অ্যাপ্লিকেশনে ব্যবহারী।