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

时间:2014-02-28 18:51:46

标签: java string stringbuilder

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

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

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

创建了StringBuilders:sb

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

答案 2 :(得分:0)

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

在堆中只创建一个StringBuilder对象,无论该类提供的方法如何使用,如append,reverse等。

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