Сколько объектов создано после объединения строк с использованием оператора «+»? - PullRequest
0 голосов
/ 19 сентября 2018

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

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

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

1 Ответ

0 голосов
/ 19 сентября 2018

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

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

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

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

Тогда существует вероятность того, что оператор может быть оптимизированкомпилятором JIT, если str никогда не доступен.

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

...