我真的不知道何时以及为什么我应该使用String的构造函数而不是文字方式。 我已经看过了,发现了一些差异的答案,这些差异并不是很清楚......但是最好的做法还是“为什么?”和“什么时候?”
我知道文字定义是由JVM处理的,但它们不是由垃圾收集器处理的(比如静态员工,注释......)......这真的是JVM内存的问题吗?
我在这里添加了我发现的最短比较:
将String创建为new()和literal有什么区别? 当我们使用new()运算符创建字符串时,它是在堆中创建的,而不是添加到字符串池中,而使用文字创建的字符串是在存在于堆的PermGen区域中的字符串池本身中创建的。
感谢您的时间和帮助。
答案 0 :(得分:5)
主要是,当您有一些动态构建的new String
或char[]
要用作字符串时,您会发现自己正在使用byte[]
。这可能是因为已经将数据从网络接收到byte[]
缓冲区,但是有很多可能的原因。
另请注意,如果您希望将新字符串插入字符串池,则可以使用intern()
method。
顺便说一句,实习词串已经被放入permgen一段时间了,而在Java 8中,permgen被完全删除了。