首页 文章

StringBuilder是否在每个操作中创建一个新的String?

提问于
浏览
5

使用此代码创建了多少个对象? - 我知道3个字符串文字在字符串常量池中,StringBuilder对象在堆中,但是当我调用reverse(),insert()或append()时它是否在池中创建了一个新字符串?

StringBuilder sb = new StringBuilder("abc");
sb.append("def").reverse().insert(3, "---");
System.out.println( sb );

3 回答

  • 0

    创建的字符串: "abc", "def", "---"

    StringBuilders创建: sb

    sb.append("def").reverse().insert(3, "---") 没有创建新对象,只是编辑 StringBuilder's 内部缓冲区(这就是建议使用StringBuilder进行演出的原因) .

  • 3

    StringBuilder 只会在调用 toString() 时创建一个新字符串 . 在此之前,它保留了添加到其中的所有元素的 char[] 数组 .

    您执行的任何操作(如 insertreverse )都在该阵列上执行 .

  • 6
    StringBuilder sb = new StringBuilder("abc");
    sb.append("def").reverse().insert(3, "---");
    System.out.println( sb );
    

    在堆中只创建1个StringBuilder对象,无论该类提供哪种方法,如append,reverse等 .

    无论使用 toString() 方法将其转换为String,都不会更改分配的内存 .

相关问题