Это связано с String
интернированием .
Java (JVM) хранит коллекцию String
литералов, которые используются для экономии памяти.Итак, всякий раз, когда вы создаете String
, например, так:
String s = "String";
Java 'интернирует' строку.Однако, если вы создадите String
следующим образом:
String s = new String("String");
Java не будет автоматически интернировать String
.Если бы вы создавали свои строки таким образом, ваш код давал бы другие результаты.
Быстрый поиск в Google обнаружил множество хороших ресурсов, касающихся String
интернирования.