স্ট্রিং ইমিউটেবল মানে আমরা অবজেক্টটিকে পরিবর্তন করতে পারি না, কিন্তু অবজেক্টের রেফারেন্স পরিবর্তন করতে পারি। স্ট্রিংকে final করা হয়েছে যাতে অন্যরা এটি এক্সটেন্ড করে এর ইমিউটেবিলিটি ধ্বংস করতে না পারে।
- নিরাপত্তা নেটওয়ার্ক কানেকশন, ডাটাবেস URL, ইউজারনেম/পাসওয়ার্ড ইত্যাদি সাধারণত স্ট্রিং হিসেবে রিপ্রেজেন্ট করা হয়। যদি এটি মিউটেবল হত, এই প্যারামিটার সহজে পরিবর্তন করা যেত।
- সিঙ্ক্রোনাইজেশন ও কনকারেন্সি স্ট্রিংকে ইমিউটেবল বানালে এটি স্বয়ংক্রিয়ভাবে থ্রেড-সেফ হয়ে যায়, ফলে সিঙ্ক্রোনাইজেশন সমস্যা সমাধান হয়।
- ক্যাশিং কম্পাইলার স্ট্রিং অবজেক্ট অপ্টিমাইজ করার সময় যদি দুটি অবজেক্টের মান একই হয় (a = "test", b = "test"), তবে একটি স্ট্রিং অবজেক্টই পর্যাপ্ত (a এবং b একই অবজেক্টকে পয়েন্ট করে)।
- ক্লাস লোডিং স্ট্রিং ক্লাস লোডিংয়ের আর্গুমেন্ট হিসেবে ব্যবহার হয়। যদি মিউটেবল হত, ভুল ক্লাস লোড হতে পারত (কারণ মিউটেবল অবজেক্ট তাদের স্টেট পরিবর্তন করে)।
উদাহরণ:
public class StringImmutableDemo {
public static void main(String[] args) {
String st1 = "Tutorials";
String st2 = "Point";
System.out.println("The hascode of st1 = " + st1.hashCode());
System.out.println("The hascode of st2 = " + st2.hashCode());
st1 = st1 + st2;
System.out.println("The Hashcode after st1 is changed : " + st1.hashCode());
}
}
আউটপুট:
The hascode of st1 = -594386763
The hascode of st2 = 77292912
The Hashcode after st1 is changed : 962735579