Я прошел через SCJP
экзамен и нашел одну строку в одной книге.JAVA: Сколько объектов будет создано? Зачем?
String s = new String("abc");
И было написано, что на вышеуказанной линии будут созданы два объекта. один на HEAP
и один на STRING POOL
.
Я не удовлетворен заявлением, данным там. Может ли кто-нибудь заставить меня понять, почему созданы два объекта?
Заранее спасибо.
Если вы хотите только один объект: 'Струнный s = "abc" ' – ACV
Вопрос странный. Внутренняя строка может быть создана во время загрузки класса вместе с множеством других объектов (даже если вы не выполните эту строку, у вас будет этот «abc» «интернированный»). Однако, если он уже был интернирован раньше (например, у вас есть метод в другом классе с именем 'abc'), то он не создается во время загрузки этого класса. Тем не менее при * выполнении * данной строки создается только один новый объект: новый экземпляр String. Также обратите внимание, что интернированный пул строк также находится в куче в эти дни. –
Я согласен, что интернированная строка будет создана в пуле String при загрузке классов или во время компиляции. Но делает ли это то, что было создано либо во время компиляции, либо при загрузке класса в пуле строк, называется отдельным объектом? –