differnce về bộ nhớ là các biểu thức của biểu mẫu: String s = "test"
sử dụng chuỗi "được thực tập" để chia sẻ các phiên bản duy nhất.
Các gọi của hình thức: String s = "test"
là hiệu quả so với String s = new String("test")
Cuộc gọi đầu tiên tận dụng các biểu thức hằng hiện hữu (nếu có), cuộc gọi thứ hai tạo ra một trường hợp mới mà không tận dụng các bất kỳ cá thể hiện có nào.
Dưới đây đang chứng tỏ đoạn này:
String test = new String("test");
String internTest = "test";
String nonInternTest = new String("test");
System.out.println(test == internTest); // prints false
System.out.println(test != nonInternTest); // prints true
System.out.println(test.equals(nonInternTest)); // prints true
Cũng lưu ý rằng JLS xác định hành vi để được như sau:
Mỗi chuỗi chữ là một tham chiếu đến một thể hiện của lớp String (§4.3.3). Đối tượng chuỗi có giá trị không đổi. Chuỗi ký tự - hoặc, nói chung, các chuỗi là các giá trị của các biểu thức không đổi được "interned" để chia sẻ các cá thể duy nhất, sử dụng phương thức String.intern.
http://stackoverflow.com/questions/390703/what-is-the-purpose-of-the-expression-new-string-in-java –