Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Сравнение строк в Java по ссылке

#java


Во многих книгах по java (например, "Философия Java") пишут, что при написании конструкции
вида String s = "some string" на самом деле происходит создание нового объекта String,
примерно так: String s = new String("some string").

Почему тогда я делаю System.out.println(new String("a") == new String("a")) и получаю
false. Но в случае System.out.println("a" == "a") получаю true. 

Почему в первом случае jvm создала два разных объекта, а во втором ссылается на один
и тот же ?
    


Ответы

Ответ 1



Если вы используете явный вызов new, то создается новый объект. НО если вы используете не явное создание объекта, то компилятор помещает его в специальное хранилище - пул строк и поэтому при последующих неявных созданиях объекта он берется от туда. Вы можете поместить строку в пул используя метод intern, но не помещайте туда все строки подряд, так как это не дает значительного прироста производительности и может вызвать переполнение памяти (OutOfMemoryError). Вот статья об этом.

Комментариев нет:

Отправить комментарий