- 字符串池是否驻留在堆上?如果是,字符串文字是否符合垃圾回收条件?
当使用new String("abc")
时,我们知道它在堆上创建一个对象并将字符串文字放入字符串池中。所以我的第二个问题是:
new StringBuilder("abc")
的行为与new String("abc")
相同吗?如果是,StringBuilder 如何操作字符串池中的字符串文字?
最佳答案
您混淆了编译时间、加载时间和运行时。
字符串文字在类加载时添加到常量池中。只需在类代码中的任何位置提及文字就足够了;您甚至不必执行该类中的任何代码行。
另一方面,表达式 new String("literal")
每次计算时都会生成一个新的 String
实例。该实例与常量池中的实例不同,并且具有字符串值的副本。
StringBuilder
在这方面与 String
的行为完全相同:它使用字符串文字值的副本进行初始化。
关于Java new String 和 new StringBuilder 在堆中的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137855/