2014-11-14 7 views
0

Я в замешательстве, что когда объект String создан? Я имею в виду во время процесса идентификации компилятором, где компилятор идентифицирует каждый оператор в классе java для привязки ИЛИ во время выполнения jvm, где jvm выполняет каждый оператор в классе java на основе привязки.Когда создается объект String?

+0

Он создается при исполнении/выполнении. Во время компиляции все преобразуется в байтовый код и проверяется на наличие ошибок компиляции. – brso05

ответ

1

Во время компиляции объекты не создаются. Это невозможно, независимо от типа.

Компиляция класса java преобразует его в байтовый код, этот байт-код выполняется в JVM, и именно здесь ваши объекты создаются в куче.

+0

И строковые литералы ('' ... "') хранятся в постоянном пуле файла .class в виде байтов UTF-8, а загрузчик классов перемещает их для совместного использования (создает или принимает строку), поэтому "abc "в одном классе ==" abc "в другом. –

+0

@StuPointerException .. соблюдайте простой код ниже: if (boolean Exp1) {String someStr = "FirstStrObj" + someVar1;} else {String someStr = "FirstStrObj" + someVar2;} то сомнение в том, сколько раз строковый объект Создано «FirstStrObj»? –

+0

@Ahmed Shareef - Короткий ответ один раз. Однако оптимизация компилятора очень умна и объединит строки, если это возможно! – StuPointerException

0

Строка s1 = "iByteCode";

Как это работает?

■ JVM сначала проверяет пул констант String, и если строка не существует, она создает новый объект String «iByteCode», и ссылка поддерживается в пуле. Переменная 's1' также относится к одному и тому же объекту.

■ Этот оператор создает один объект String «iByteCode».

Смежные вопросы