Java中请问一共创建了多少个对象?(与StringBuffer有关)

来源:百度知道 编辑:UC知道 时间:2024/06/23 18:51:34
StringBuffer sb = new StringBuffer("abc");
sb.append("567");
sb.append("abc");
我觉得是创建了三个对象: "abc","567"和一个StringBuffer对象。可是书上说是共创建两个对象,晕了

qiquijie的回答有些无语...
是2个
StringBuffer sb = new StringBuffer("abc");
sb就不说了吧 它是你创建的StringBuffer类的一个对象
new StringBuffer("abc")是创建了一个对象"abc" sb指向"abc"
"abc"和"567"是本来就存在于堆空间(貌似这么说 数据结构我不是很懂 不过道理是对的)的 不算创建出来的 所以它俩都不是
new StringBuffer("abc")是没管下面出现的"abc" 在String堆空间之外另外创建的

我觉得应该是3个对象。主要分成两个阶段创建,在编译期生成两个常量字符串对象,放在字符串池中,它们是abc 和 567。然后在运行期创建一个StringBuffer对象,放在堆中。所以一共创建3个对象,两个常量字符串对象,一个StringBuffer对象。

通过查看源代码可以知道,当StringBuffer以new StringBuffer(String str)这种方式创建时,会先调用父类AbstractStringBuilder的构造方法,这里会生成一个char[],也就是char的数组对象,然后还有一个对象就是StringBuffer本身。append方法是不会创建新的对象,不然和用+号来连接String有什么区别?

2个
一个是声明:
StringBuffer sb = null;

还有个是new:
sb = new StringBuffer("abc");

两个对象
sb为一个Stringbuffer对象
new StringBuffer(“abc”)为一个对象