StringBuffer sb = new StringBuffer("abc");
sb.append("567");
sb.append("abc");
请问一共创建了多少个对象?
我感觉是2个,当StringBuffer以new StringBuffer(String str)这种方式创建时,会先调用父类AbstractStringBuilder的构造方法,这里会生成一个char[],然后还有一个对象就是StringBuffer本身。
[code]
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
if (len == 0) return this;
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
str.getChars(0, len, value, count);//把str 复制 value 中
count = newCount;
return this;
}
public StringBuffer() {
super(16);
}
//下面是 stringBuffer 的super
AbstractStringBuilder(int capacity) {
value = new char[capacity];//初始容量为16
}
[/code]
StringBuffer 、"abc"、"567"、char[] 四个。。我猜测是这样的。。
不过虚拟机里面可能有别的机制,源代码上我看大概是4个
既然你连内部的char[]都研究了,那么"abc" / "567"这两个呢?
3个StringBuffer,"abc","567"
StringBuffer的本质也是一个char[],只是它是可以变长的
/**
* The value is used for character storage.
*/
char value[];
/**
* The count is the number of characters used.
*/
int count;
2个?1个String对象,一个StringBuffer对象?
2个String 一个StringBuffer 一个引用
4个:
sb
"abc"
"567"
"abc"
额,append了两个string
那就是2个string+1个StringBuffer?
如果连内部的数组都算的话,这就没完没了了。
每个类型还有一个Class对象呢?
3个,sb一个,"567"一个常量,两个“abc”共一个常量
不能考虑其内部机制,这样就无穷无尽了,3个对象,一个是StringBuffer,sb本身,还有就是后面两个append 进去的字符串
我想问哈。这个问题有啥子实际作用没? 8)
一共是两个 对象sb (也就是最开始的abc字符串)和引用sb, 而后面的sb.append("567"); sb.append("abc");都没有生成新的对象 StringBuffer 是字符串变量 一直是对原串进行操作