Вызывается 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;
}
Я не думаю, что факт, что ссылка на строку объявляется окончательной, имеет какое-либо отношение к вложению в этом случае.