На додаток до того , що вже було сказано, строкові літерали [тобто рядки , як , "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()
для порівняння рядків; ==
тести на фізичну рівність).
Літеральні рядки для інтернінгу хороші тим, що вони часто використовуються не раз. Наприклад, розгляньте (надуманий) код:
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
Якби у нас не було інтернування Strings, "Наступну ітерацію" потрібно було б створити 10 разів, тоді як зараз вона буде створена лише один раз.