gpt4 book ai didi

Java 静态/实例方法优化

转载 作者:行者123 更新时间:2023-11-29 08:44:45 28 4
gpt4 key购买 nike

在 Java 中是未修改方法变量,缺少final,每次都重新初始化限定符

  1. 静态方法
  2. 实例方法

如果 1. 或 2.(或两者)的答案是 final 限定符允许 Java 执行优化并存储方法变量只有一次?

如果答案取决于变量的类型,变量优化/未优化?例如,是 Stringint 优化而 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com