String interning là quá trình lưu một bản sao duy nhất của mỗi giá trị chuỗi khác nhau. Ngoài ra, chuỗi không thể thay đổi. Cách này, chuỗi có thể chứa cùng dữ liệu và chia sẻ cùng bộ nhớ. Bộ nhớ yêu cầu giảm đáng kể.
Khi hàm intern gọi:
- Kiểm tra bằng nhau giữa hai chuỗi - xem đối tượng chuỗi có trong String Constant Pool (SCP) không.
- Nếu có, chuỗi trả về bằng cách lấy từ pool. Ngược lại, đối tượng String mới tạo và thêm vào pool. Tham chiếu đến String Object cũng trả về.
- Nếu cho hai chuỗi
a,b,a.intern() == b.intern()true iffa.equals(b)trả về true.
Hãy xem ví dụ:
Ví dụ
public class Demo{
public static void main(String[] args){
String s1 = new String("Its");
String s2 = s1.concat("sample");
String s3 = s2.intern();
System.out.println("Kiểm tra bằng nhau đối tượng 2 và 3:");
System.out.println(s2 == s3);
String s4 = "Its a sample";
System.out.println("Kiểm tra bằng nhau đối tượng 3 và 4:");
System.out.println(s3 == s4);
}
}
Kết quả
Kiểm tra bằng nhau đối tượng 2 và 3: true Kiểm tra bằng nhau đối tượng 3 và 4: false
Lớp Demo chứa main. Ba instance String định nghĩa, chuỗi thứ hai là nối chuỗi đầu với giá trị khác. Chuỗi thứ ba gọi intern trên chuỗi hai. Các chuỗi so sánh bằng == và kết quả hiển thị.