在Java中,我们看到许多final可以使用关键字的地方,但它的使用并不常见.
例如:
String str = "abc";
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)
在上述情况下,str可以final但通常不会这样做.
当一个方法永远不会被覆盖时,我们可以使用final关键字.类似地,如果一个类不会被继承.
在任何或所有这些案例中使用final关键字是否真的能提高性能?如果是这样,那怎么样?请解释.如果正确使用final真正重要的性能,应在Java程序员开发什么习惯,使关键字的最好用?
在C++中,我可以声明一个方法"内联",编译器可能会内联它.据我所知,Java中没有这样的关键字.
如果JVM决定这样做,内联就完成了吗?我能以某种方式影响这个决定吗?
共识似乎是将成员变量标记为final有一个性能优势,因为它们永远不需要从主内存重新加载.我的问题是,当变量无法改变时,javac或Hotspot会自动为我做这件事.例如,javac将在下面的这堂课中制作'x'决赛......
public class MyClass {
private String x;
MyClass(String x) {
this.x = x;
}
public String getX() {
return x;
}
}
Run Code Online (Sandbox Code Playgroud)
在次要问题上,有没有人提出经验证据表明成员最终会使代码运行得更快?在进行远程调用或数据库查找的任何应用程序中,任何好处肯定都可以忽略不计?
我知道已经提出并回答了非常相似的问题,我阅读了我能够找到的并且仍然没有100%清楚的问题.
考虑此代码段:
public static void fooMethod {
while(<...>) {
....
final int temp = <something>;
....
}
}
Run Code Online (Sandbox Code Playgroud)
没有内部阶级,没有别的特殊或不寻常.对我来说似乎是违反直觉的.
final在上面的示例中声明局部变量是否可以用于任何目的?
我是否理解正确有或没有final这里编译器将产生完全相同的字节码?
我在这里错过了什么吗?如果是RTFM案例,请指出正确的方向.
后续问题(如果可以的话)
通过这样的重写来获得和/或失去什么(理解temp不必是原始的)?
public static void fooMethod2 {
int temp;
while(<...>) {
....
temp = <something>;
....
}
}
Run Code Online (Sandbox Code Playgroud)