Tôi không chắc chắn về JavaScript, nhưng trong Java, các chuỗi thực hiện một bước bổ sung để không thay đổi, với "Nhóm hằng số chuỗi". Các chuỗi có thể được xây dựng bằng chuỗi chữ ( "foo"
) hoặc bằng một phương thức String
khởi tạo lớp. Các chuỗi được xây dựng bằng các ký tự chuỗi là một phần của Nhóm Hằng số Chuỗi và cùng một chuỗi ký tự sẽ luôn là cùng một địa chỉ bộ nhớ từ nhóm.
Thí dụ:
String lit1 = "foo";
String lit2 = "foo";
String cons = new String("foo");
System.out.println(lit1 == lit2); // true
System.out.println(lit1 == cons); // false
System.out.println(lit1.equals(cons)); // true
Ở trên, cả hai lit1
và lit2
đều được xây dựng bằng cách sử dụng cùng một chuỗi ký tự, vì vậy chúng đang trỏ đến cùng một địa chỉ bộ nhớ; lit1 == lit2
kết quả là true
vì chúng chính xác là cùng một đối tượng.
Tuy nhiên, cons
được xây dựng bằng cách sử dụng hàm tạo lớp. Mặc dù tham số là cùng một hằng chuỗi, nhưng hàm tạo sẽ cấp phát bộ nhớ mới cho cons
, nghĩa cons
là không giống đối tượng lit1
và lit2
mặc dù chứa cùng dữ liệu.
Tất nhiên, vì ba chuỗi đều chứa cùng một dữ liệu ký tự nên việc sử dụng equals
phương thức sẽ trả về true.
(Tất nhiên, cả hai loại cấu trúc chuỗi đều không thay đổi)