นอกเหนือจากสิ่งที่ได้กล่าวไปแล้ว String literals [เช่น Strings เหมือน"abcd"
แต่ไม่เหมือนnew String("abcd")
] ใน Java ยังถูก จำกัด ไว้ซึ่งหมายความว่าทุกครั้งที่คุณอ้างถึง "abcd" คุณจะได้รับการอ้างอิงไปยังString
อินสแตนซ์เดียวแทนที่จะเป็นอินสแตนซ์ใหม่ แต่ละครั้ง. ดังนั้นคุณจะมี:
String a = "abcd";
String b = "abcd";
a == b; //True
แต่ถ้าคุณมี
String a = new String("abcd");
String b = new String("abcd");
ก็เป็นไปได้ที่จะมี
a == b; // False
(และในกรณีที่ใครก็ตามต้องการการเตือนให้ใช้.equals()
เพื่อเปรียบเทียบสตริงเสมอ==
การทดสอบความเท่าเทียมกันทางกายภาพ)
Interning String literals เป็นสิ่งที่ดีเพราะมักใช้มากกว่าหนึ่งครั้ง ตัวอย่างเช่นพิจารณารหัส (ที่สร้างขึ้น):
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
หากเราไม่มีการสร้างสตริงภายใน "การทำซ้ำครั้งต่อไป" จะต้องสร้างอินสแตนซ์ 10 ครั้งในขณะที่ตอนนี้จะสร้างอินสแตนซ์เพียงครั้งเดียว