java 的StringBuffer的问题,大家快来啊

2024-12-05 01:22:27
推荐回答(4个)
回答1:

2个对像。
一个是StringBuffer对象,一个是String对象("abc")
但那个String对象(即:"abc"比较特殊,它是在编译期确定的,所以会放到常量池中,如果在你的程序的其他地方以“显示的方式”出现"abc"的话,那这个"abc",将是同一个"abc")
例如:
StringBuffer A = new StringBuffer("abc");
String str = "abc"升者腔;
String str2 = "abc";
这3个"abc"其实在编译后的class文件中,指向的是同一内存空间。

下面我来介绍一下StringBuffer类

StringBuffer是一个用于存放动态存放字符串数据的类,他继承自java.lang.AbstractStringBuilder这个类。

所谓动态存放是指:你无需考虑StringBuffer大小的问题。
当你利用StringBuffer的append方法向其自身添加字符串的时候,如果此时StringBuffer默认提供的空间大小不够用,
那么它会自动扩展自身的存储空间,以保证数据能够正常的放入到StringBuffer其中。

我们也可以手动的设置StringBuffer的空间大小
例如:

StringBuffer buf = new StringBuffer(10);

上面的意思是指:将StringBuffer的内部容量设置为10个字符(char)大小的长度。
StringBuffer默认的存储空间大小是16个字符,也就是说 new StringBuffer() 就等于吵衫 new StringBuffer(16)。

StringBuffer的底层是利用它的父类(AbstractStringBuilder)内部的一个默认长度为16的字符数组来存放数据的。(即:char value[];)

每当你利用 StringBuffer的append方法向其中添加一个字符串的时候StringBuffer都会调用其父类(AbstractStringBuilder)的append方法,
然后AbstractStringBuilder会判断其内部用于存放数据的那个char[]数组是否已经满了,
(1)如果没有满,就会将你传入的字符串转化为
字符并存入到那个字符数组中(即: str.getChars(0, len, value, count);)。
(2)而如果那个char[]数组已经满了,那么嫌此AbstractStringBuilder会创建一个大小为当前数组两倍的新的char[]数组。
然后利用System.arraycopy(value, 0, newValue, 0, count);将原始数据拷贝到这个新的数组中即可。

我靠,看我写的够详细的吧,大哥。。。。把分给我吧。。。。
像我这样的认真人这是太少了。。。加分吧~~~~

回答2:

不就创建了一个对象A吗?它是StringBuffer类型,里面的值是abc

回答3:

StringBuffer的没耐旦构造方法是这样的:
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
其父类亩盯是AbstractStringBuilder ,构造方法:
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
append方法:

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);
count = newCount;
return this;
}

再详细的,就枯扰看JDK的src吧!

回答4:

两唤州搭个对象,String类的和拿实迹陆例"abc"和指向"abc"的StringBuffer类的实例A。