Простой ответ - ноль объектов.Это выражение постоянной времени компиляции, и компилятор байт-кода оценивает его как "abcd"
... перед созданием файла ".class".
На самом деле, с современными JVM создаются экземпляры String
объектов, связанныхс литералами и константными выражениями времени компиляции лениво, поэтому один объект String
может быть создан при первом выполнении оператора.Но только первый раз.
Таким образом, более правильный ответ - либо ноль, либо один String
объект, в зависимости от:
- реализации JVM строкового литерального интернирования (ленивый или нетерпеливый)) и
- , является ли это первым выполнением любого оператора, использующего буквальную константу времени
"abcd"
или постоянную времени компиляции.
Тогда существует вероятность того, что оператор может быть оптимизированкомпилятором JIT, если str
никогда не доступен.
И это становится еще сложнее, если учесть возможность выгрузки класса.