#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). Вот статья об этом.
Комментариев нет:
Отправить комментарий