Сколько объектов создается после конкатенации строк с помощью оператора "+"?

89
8

Я хочу спросить, сколько объектов создано после выполнения следующего оператора в java..

String str = "a"+"b"+"c"+"d"

На мой взгляд, должен создаваться только один объект и объект StringBuilder. Пожалуйста, поправьте меня и объясните логику этого.

спросил(а) 2021-01-25T16:29:05+03:00 5 месяцев назад
1
Решение
146

Простой ответ - нулевые объекты. Это выражение постоянной времени компиляции, и компилятор байт-кода оценивает его до "abcd"... перед созданием файла ".class".

Фактически, с помощью современных JVM создание экземпляров String связанных с литералами и выражениями времени компиляции, является ленивым, поэтому при создании этого String может быть создан единственный объект String. Но только в первый раз.

Таким образом, более правильным ответом является либо нулевой, либо один объект String, в зависимости от:

    реализация JVM интерполяции строк (ленивый или нетерпеливый) и является ли это первым исполнением любого оператора, который использует литерал "abcd" или константу времени компиляции.

И это становится еще сложнее, если учесть возможность разгрузки классов.

ответил(а) 2021-01-25T16:29:05+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема