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 Stringkhở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 lit1và 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 == lit2kết quả là truevì 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 conslà không giống đối tượng lit1và lit2mặ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 equalsphươ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)