10

一个快速的只是为了让内心平静:
考虑以下

final String str = "This is the end";

str.length()运行时评估还是在字节码中硬编码为 15?

4

3 回答 3

13

str.length()计算String constructor并保存在 中private final int count;str.length()只返回count变量。我刚刚在这里查看了源代码http://www.docjar.com/html/api/java/lang/String.java.html

于 2012-08-13T08:24:44.083 回答
12

str.length() 在运行时评估。final表示引用的值不能更改。它与字符串本身无关。

但是,如果您查看源代码,String您会看到它length()返回一个字段的值,因此不会发生计算,值 os 只是读取...

于 2012-08-13T08:23:10.497 回答
2

在字节码中,方法将被评估。

但是,方法调用可能会在jit 编译期间内联

String.length() 方法的代码如下:

public int length() {
    return count;
}

我认为在这种情况下,对字符串的引用被声明为 final 对内联没有任何影响。

于 2012-08-13T08:22:02.423 回答