在 Java 中是未修改方法变量,缺少final
,
每次都重新初始化限定符
- 静态方法
- 实例方法
如果 1. 或 2.(或两者)的答案是 final
限定符
允许 Java 执行优化并存储方法
变量只有一次?
如果答案取决于变量的类型,
变量优化/未优化?例如,是 String
,
int
优化而 Map
未优化?
相比之下,Java 只会存储一个静态类变量 比如
private static final String foo = "Teenage Mutant Ninja Turtle";
一次。澄清一下:问题是要不要
1:
static SomeReturnValueOrVoid SomeMethod() {
// 1.a Not modified, is this reinitialized each method call?
String foo = "Teenage Mutant Ninja Turtle";
// 1.b Marked final, is this reinitialized each method call?
final String bar = "Teenage Mutant Hero Turtle";
}
2:
SomeReturnValueOrVoid SomeMethod() { // not static
// 2.a Not modified, is this reinitialized each method call?
String foo = "Teenage Mutant Ninja Turtle";
// 2.b Marked final, is this reinitialized each method call?
final String bar = "Teenage Mutant Hero Turtle";
}
相当于
3:
class SomeClass {
static final String foo = "Teenage Mutant Ninja Turtle";
SomeReturnValueOrVoid SomeMethod() {
// Uses foo
}
static SomeReturnValueOrVoid SomeMethod() {
// Uses foo
}
...
}
最佳答案
无论是 static
方法还是 final
变量或两者,都没有区别。局部变量的范围意味着每次都会发生这种赋值(除了优化*)。
但是,当涉及到您示例中的字符串时,这些字符串将来自 string pool .所以赋值每次都会发生,但它们都会引用相同的 string
实例。
*优化 - JIT compiler可以内联这些值,因此每个解决方案的运行速度可能与另一个解决方案一样快。因此,除非您意识到实际的性能问题,否则不应尝试对自己进行微优化。
关于Java 静态/实例方法优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157002/