Вызывается String.length() для окончательной строки?

Быстро, чтобы успокоиться:
Учитывая следующее

final String str = "This is the end";

Является ли str.length() оценен во время выполнения или жестко запрограммирован как 15 в байте-коде?

Ответ 1

str.length() оценивается во время выполнения. final означает, что значение ссылки не может быть изменено. Это не имеет никакого отношения к самой строке.

Однако, если вы посмотрите в исходный код String, вы увидите, что length() возвращает значение поля, поэтому никаких вычислений не происходит, значение os просто читается...

Ответ 2

str.length() вычисляется в String constructor и сохраняется в private final int count;, str.length() просто возвращает переменную count. Я просто проверил источник здесь http://www.docjar.com/html/api/java/lang/String.java.html

Ответ 3

В байт-коде будет оцениваться метод.

Однако вызов метода, скорее всего, будет заключен во время jit-компиляции

Код метода String.length() выглядит следующим образом:

public int length() {
    return count;
}

Я не думаю, что факт, что ссылка на строку объявляется окончательной, имеет какое-либо отношение к вложению в этом случае.