https://www.baeldung.com/java-final-performancefinal该博客给出了在java中
使用关键字来提高性能的示例。这是他们给出的例子:
public static String concatNonFinalStrings() {
String x = "x";
String y = "y";
return x + y;
}
public static String concatFinalStrings() {
final String x = "x";
final String y = "y";
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
显然,编译器将优化concatFinalStrings()为仅返回"xy". 为什么编译器不能对 做同样的事情concatNonFinalStrings()?x并且y范围有限,并且从未在其他地方使用过。那么,编译器当然应该能够将它们视为最终的吗?不可能有一些外部实体可以改变x和的值y,因为它们在函数外部是不可访问的。我链接的博客将这些称为“有效最终”,并指出编译器不会对“有效最终”变量执行代码优化。为什么不?
此外,为什么mutRust 中存在这样的关键字?也许在 Java 中这是有意义的,你可以拥有公共变量,并且你不知道还.class存在哪些其他文件,但在 Rust 中,如果整个过程立即编译,那么编译器肯定可以mut通过查看哪些变量发生变化来推断出哪些变量。他们的价值?现在这些是否只是为了使代码更清晰而存在,而实际上并没有提供任何类型的优化?