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