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