String bất biến (immutable) nghĩa là không thể thay đổi đối tượng bản thân, nhưng có thể thay đổi tham chiếu đến đối tượng. String được làm final để không cho phép người khác kế thừa và phá vỡ tính bất biến.
- Bảo mật (Security) Tham số thường được biểu diễn bằng String trong kết nối mạng, URL database, username/password, v.v. Nếu có thể thay đổi, các tham số này dễ bị sửa đổi.
- Đồng bộ và並发 (Synchronization and Concurrency) Làm String bất biến tự động làm chúng thread-safe, giải quyết vấn đề đồng bộ.
- Lưu trữ đệm (Caching) Khi trình biên dịch tối ưu String, nếu hai đối tượng có cùng giá trị (
a = "test",b = "test") thì chỉ cần một đối tượng String (cả a và b trỏ đến cùng object). - Nạp lớp (Class loading) String dùng làm đối số cho class loading. Nếu có thể thay đổi, có thể dẫn đến nạp sai lớp (vì đối tượng mutable thay đổi trạng thái).
Ví dụ:
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());
}
}
Kết quả:
The hascode of st1 = -594386763 The hascode of st2 = 77292912 The Hashcode after st1 is changed : 962735579