有关池的Java String最佳实践

时间:2010-09-20 12:48:28

标签: java string

我一直想知道在Java中创建String的最有效方法是什么。我的意思是指不会改变价值的字符串。

示例:

String prefix = "Hi, I am ";

prefix不会改变,但后缀可能会改变。

  • 我不想让prefix成为static final变量,因为即使很少使用该类,它仍然会在JVM中保持活跃状态​​... bla bla。

  • 当我执行以下操作时:

    String fullWord = ("Hi, I am "+_postFix);

    我猜测"Hi, I am"字符串值将保留在Java字符串池中,并且我没有将前缀声明为变量的“开销”。

意思是我的问题归结为:

  1. 当我没有使用new关键字声明String变量时,是否始终使用Java String池?

  2. 在使用String之前将其声明为变量是否更好?

  3. 字符串池如何工作? JVM是否检测到经常使用相同的String值并继续在JVM内存中引用该字符串?

1 个答案:

答案 0 :(得分:10)

  1. 所有文字String都是实习。
  2. 编写易于理解的代码。真的不值得尝试对此进行纳米优化。
  3. 由类加载器加载的所有文字String都被实现,String返回的String.intern也是如此(在典型的实现中,这是一种缓慢的方式)。