StringBuffer 字符串缓冲类。字符个数可以发生改变的字符串类。
与String区别:
String一旦被赋值,值不能发生改变。而StringBuffer,值还可以改变。
为什么呢?
StringBuffer采用的是缓冲区机制。
一开始,首先开辟一些空间,然后,随着数据的增多,还可以继续开辟空间。这些操作针对的是同一个对象。
构造方法:
A: StringBuffer()
B: StringBuffer(int capacity)
C: StringBuffer(String str)
成员方法:
public int length():字符个数。实际长度。
public int capacity():字符容量。理论长度。
A:添加功能
public StringBuffer append(int i); -- 在结尾处添加
public StringBuffer insert(int index, int i); -- 在指定索引处添加
B:删除功能
StringBuffer deleteCharAt(int index); -- 删除指定位置处的字符
StringBuffer delete(int start, int end); -- 删除指定开始位置和结束位置之间的字符
C: 替换功能
StringBuffer replace(int start, int end, String str); -- 将指定范围内(索引从start到end,左闭右开)的字符串替换为指定字符串str
D: 截取功能
public String substring(int start); -- 从索引为start处截取到结尾
public String substring(int start, int end); -- 从索引为start,截取到end。左闭右开。
E: 反转功能
public StringBuffer reverse(); -- 将此字符序列用其反转形式取代
补充:关于String类的面试题。
1.
public static void main(String[] args) {
String s = "abc";
change(s);
System.out.println(s);
}
public static void change(String s) {
s += "hello";
}
注:基本类型 -- 形式参数改变不影响实际参数。
引用类型 -- 形式参数改变直接影响实际参数。
但是,字符串是特殊的引用类型,实参传递到形参时,实际上是把值传递给了形参。
-- 如果是StringBuffer.则打印的是abchello。StringBuffer容量可变。
2. 字符串拼接问题
public static void main(String[] args) {
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2); // false
System.out.println(s3 == "a" + "b"); // true
}
注:JVM对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的。
JVM对于字符串常量的"+"号连接,在程序编译期,JVM就将常量字符串的"+"连接优化为连接后的值。
|