Этот код создает строковый объект в куче каждый раз, когда он выполняется?
Нет.После создания в буквальном пуле.То же самое упоминается снова и снова.
Поддерживает ли строковый литерал только строковые литералы или также строковый объект?
Все являются только объектами, но объекты, созданные с помощью присваивания, помещаются в пул, гдепоскольку созданный с помощью new
оператор помещается в кучу.
Когда JVM решает, что ей нужно добавить строковый литерал в пул строк?решает ли он во время компиляции или во время выполнения?
Всякий раз, когда JVM встречает выражения типа
String str="Hello"; (string literal) or
String str="Hel" + "lo"; (string constant expression).
и результирующая строка (str
в данном случае) не являетсязатем во всех таких случаях он добавляет новую строку в пул.Это конечно происходит во время выполнения.
Проверьте эту ссылку.