在Java是未修改方法變量,在一個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
}
...
}
字符串常量在編譯過程中被解析 – AdamSkywalker
除'Map'之外的其他類型,如何在這種情況下處理? –
如果您在方法內部創建新映射,無論它是否爲最終映射,它都會每次創建。 – AdamSkywalker