Java 字符串 : private static vs local variable performance

标签 java string performance string-pool

在 java 中使用 private final static String 与使用每次访问方法时都必须“初始化”的本地字符串变量相比,是否有任何性能优势?

我确实认为使用 private static final 字符串对于在一个类的不同部分中重用的常量是一种很好的做法,但是如果一个字符串仅在一个方法中使用,则在一个方法中位置,出于一个没有其他方法关心的非常具体的原因,我实际上更喜欢使用较少的私有(private)成员来保持类的内部接口(interface)干净,并且只使用局部变量。

鉴于 java 有字符串实习,并且实际上保留了一个池,其中包含使用引号声明的每个字符串的单个副本 (String s = "some string"),实际上是否会有性能与使用静态字符串相比,每次访问方法时都必须声明/初始化/分配变量?

为了更清楚一点,使用 SSLS 有什么区别吗?

class c {
private final static String SS = "myString";

  private void method(){
     //do something with SS
  }

  private void OtherMethod(){
     String LS = "myOtherString"
     //do same thing with LS
  }
}

最佳答案

使用命名常量可能更利于维护。然而,在编译时已知的常量可以用作内联,在这种情况下不太可能有任何区别。

注意:如果您使用的是字符串字面值,则无论在 JVM 中的哪个位置使用它,都只会创建一次。

在这种情况下,唯一的区别是在堆栈上使用局部变量,它不太可能比用作内联的常量更昂贵。

would there actually be a performance hit from having to declare the variable each time the method is accessed

由于 Java 使用静态编译器,因此在加载类/方法时,变量只声明一次(或编译的每个阶段一次),无论调用多少次方法。然而,变量可能每次都被初始化。

关于Java 字符串 : private static vs local variable performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185564/

相关文章:

Java每0.5秒在动画中 move jlabel

java - 使用 Selenium 播放和暂停视频

java - Tomcat 没有在 Web 应用程序的上下文中添加斜杠

java ->>= 和 >>>= 的区别

java - 您是否应该在插入集合之前检查重复项

performance - 如何提高电子商务网站的搜索性能?

java - Intent.getStringExtra ("key")返回 null

c - 为什么在 char** 转换后会出现段错误?

Python:如何反转字符串的多个切片操作

windows - 我可以获得 Windows Azure 诊断性能计数器名称的完整列表吗?