Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否为最后一个字符串调用String.length()?_Java_String_Final - Fatal编程技术网

Java 是否为最后一个字符串调用String.length()?

Java 是否为最后一个字符串调用String.length()?,java,string,final,Java,String,Final,一个快速获得心灵平静的方法: 考虑到以下几点: final String str = "This is the end"; 是在运行时计算str.length()还是在字节码中硬编码为15?在字节码中,将对该方法进行计算 但是,方法调用可能会在过程中内联 String.length()方法的代码如下所示: public int length() { return count; } 我不认为对字符串的引用被声明为final这一事实对本例中的内联有任何影响 str.length()在运行

一个快速获得心灵平静的方法:
考虑到以下几点:

final String str = "This is the end";

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

在字节码中,将对该方法进行计算

但是,方法调用可能会在过程中内联

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

public int length() {
    return count;
}
我不认为对字符串的引用被声明为final这一事实对本例中的内联有任何影响

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


但是,如果您查看
String
的源代码,您将看到
length()
返回字段的值,因此不进行计算,值os只需读取…

字符串构造函数中计算,并保存在
私有final int count中
str.length()
只返回
count
变量。我刚刚检查了这里的源代码,
javac
编译器不太可能对它进行优化,但是如果你运行足够的代码来预热它,JIT很可能会优化它。为什么要在意呢?这可能依赖于JVM实现,但在和JVM下可能会很快。如果这被证明是一个性能瓶颈(不太可能),探查器将显示它。字符串在Java中是不可变的。是否将变量设置为final并不重要。它确实重要,但不在问题的范围内。最后一个变量不能被重新分配,而普通变量可以。这意味着…该值是在运行时计算的&然后由jit编码?