Java new String 和 new StringBuilder 在堆中的行为

标签 java string garbage-collection stringbuilder

  1. 字符串池是否驻留在堆上?如果是,字符串文字是否符合垃圾回收条件?

当使用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/

    相关文章:

    java - Google App Engine 中请求线程之间的环境共享

    Java 初学者 - 如何在一行上多次打印一个字符

    garbage-collection - 在函数式语言中使用大型数据结构时减少垃圾收集时间

    java - 在java函数内部或外部操作数据,会对性能产生影响吗?

    garbage-collection - 垃圾收集瓶颈的示例

    java - 写入 RandomAccessFile 时出现 NullPointerException

    java - 如何使用 vert.x 在工作线程上应用并发处理

    ios - iOS 中的日期和时间格式

    java - 将字节数组的字节转换为位并存储在整数数组中

    java - NullPointerException 加载 fxml