使用此代码创建了多少个对象? - 我知道3个字符串文字在字符串常量池中,StringBuilder对象在堆中,但是当我调用reverse(),insert()或append()时它是否在池中创建了一个新的字符串?
StringBuilder sb = new StringBuilder("abc");
sb.append("def").reverse().insert(3, "---");
System.out.println( sb );
答案 0 :(得分:6)
StringBuilder
只会在调用toString()
时创建一个新字符串。在此之前,它会保留添加到其中的所有元素的char[]
数组。
您执行的任何操作(例如insert
或reverse
)都会在该阵列上执行。
答案 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,都不会更改分配的内存。