String เป็น immutable หมายความว่าเราไม่สามารถเปลี่ยนแปลงออบเจ็กต์เองได้ แต่เราสามารถเปลี่ยนการอ้างอิงไปยังออบเจ็กต์ได้ String ถูกทำเป็น final เพื่อไม่ให้ผู้อื่นขยายมันและทำลายความ immutable ของมัน
- ความปลอดภัย (Security) พารามิเตอร์มักถูกแทนด้วย String ในการเชื่อมต่อเครือข่าย URL การเชื่อมต่อฐานข้อมูล ชื่อผู้ใช้/รหัสผ่าน เป็นต้น หากมันเป็น mutable พารามิเตอร์เหล่านี้อาจถูกเปลี่ยนแปลงได้ง่าย
- การซิงโครไนซ์และความขนาน (Synchronization and Concurrency) การทำให้ String เป็น immutable ทำให้มันเป็น thread-safe โดยอัตโนมัติ ทำให้แก้ปัญหาการซิงโครไนซ์ได้
- การแคช (Caching) เมื่อคอมไพเลอร์เพิ่มประสิทธิภาพออบเจ็กต์ String ของเรา ดูเหมือนว่าหากออบเจ็กต์สองตัวมีค่าเดียวกัน (a =" test" และ b =" test") เราจึงต้องการออบเจ็กต์ String เพียงตัวเดียว (สำหรับ a และ b ทั้งคู่ ตัวชี้ทั้งสองจะชี้ไปที่ออบเจ็กต์เดียวกัน)
- การโหลดคลาส (Class loading) String ถูกใช้เป็นอาร์กิวเมนต์สำหรับการโหลดคลาส หากเป็น mutable อาจทำให้โหลดคลาสผิด (เพราะออบเจ็กต์ mutable เปลี่ยนสถานะได้)
ตัวอย่าง:
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