我应该何时创建String作为new()和literal?

时间:2014-04-09 22:36:15

标签: java string

我真的不知道何时以及为什么我应该使用String的构造函数而不是文字方式。 我已经看过了,发现了一些差异的答案,这些差异并不是很清楚......但是最好的做法还是“为什么?”和“什么时候?”

我知道文字定义是由JVM处理的,但它们不是由垃圾收集器处理的(比如静态员工,注释......)......这真的是JVM内存的问题吗?

我在这里添加了我发现的最短比较:

将String创建为new()和literal有什么区别? 当我们使用new()运算符创建字符串时,它是在堆中创建的,而不是添加到字符串池中,而使用文字创建的字符串是在存在于堆的PermGen区域中的字符串池本身中创建的。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:5)

主要是,当您有一些动态构建的new Stringchar[]要用作字符串时,您会发现自己正在使用byte[]。这可能是因为已经将数据从网络接收到byte[]缓冲区,但是有很多可能的原因。

另请注意,如果您希望将新字符串插入字符串池,则可以使用intern() method

顺便说一句,实习词串已经被放入permgen一段时间了,而在Java 8中,permgen被完全删除了。