Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Tại sao String literal được lưu trong String Constant Pool trong Java?


Có hai cách tạo đối tượng String trong Java:

  • Sử dụng toán tử new
String str = new String("Tutorials Point");
  • Sử dụng String literal
String str = "Tutorials Point";

Khi gọi new String() trong Java, nó tạo đối tượng trong Heap, còn String literal sẽ vào String Constant Pool (SCP).

Đối với đối tượng, JVM dùng SCP để quản lý bộ nhớ hiệu quả. Khác với các đối tượng Java khác, thay vì quản lý String object trên vùng heap, họ giới thiệu String constant pool. Đặc điểm quan trọng: SCP không tạo đối tượng String giống nhau nếu đã có hằng số đó trong pool.

Ví dụ

public class SCPDemo {
    public static void main (String args[]) {
        String s1 = "Tutorials Point";
        String s2 = "Tutorials Point";
        System.out.println("s1 and s2 are string literals:");
        System.out.println(s1 == s2);
        String s3 = new String("Tutorials Point");
        String s4 = new String("Tutorials Point");
        System.out.println("s3 and s4 with new operator:");
        System.out.println(s3 == s4);
    }
}

Kết quả

s1 and s2 are string literals: true
s3 and s4 with new operator: false