在 Java 语言中,由于 String 类是final 类型的,所以使用 String 定义的字符串是一个常量,因此其内容和长度都是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。源码如下(由于类中内容过多,内容已省略)
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence{}
如果不想创建新的字符串就对字符串进行修改,可以使用 StringBuffer 类(也称字符串缓冲区)来操作字符串。
StringBuffer 类和 String 类最大的区别在于StringBuffer类的内容和长度都是可以改变的。StringBuffer 类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的 StringBuffer 对象
StringBuffer的作用原理:StringBuffer是可变字符序列,其内部实现是一个字符数组,初始时有一个默认的大小(通常为 16)。
当进行字符串操作时,它会检查内部字符数组的剩余空间是否足够容纳新添加的字符。如果足够,就直接将新的字符添加到字符数组的合适位置;如果不足,StringBuffer 会自动创建一个更大的新字符数组(通常是原来容量的一定倍数加上新添加字符的长度),然后将原字符数组中的内容复制到新数组中,再继续进行添加操作。
用法及常用方法:
package oneHundredDayPlan.twoDay;
//StringBuffer
public class Two {
public static void main(String[] args) {
String a = "a";
StringBuffer s = new StringBuffer("I LOVE YOU");
s.append("!");//添加字符到StringBuffer对象中末尾
System.out.println(s);//I LOVE YOU!
s.insert(10," SO MUCH");//在StringBuffer对象中的指定位置插入字符串
System.out.println(s);//I LOVE YOU SO MUCH!
s.deleteCharAt(18);//移除StringBuffer对象中的指定位置的字符
System.out.println(s);//I LOVE YOU SO MUCH
s.delete(10,18);//删除StringBuffer对象中指定范围的字符或字符串
System.out.println(s);//I LOVE YOU
s.replace(7,10,"WORLD!");//将StringBuffer对象中指定范围的字符或字符串用新的字符串进行替换
System.out.println(s);//I LOVE WORLD!
s.setCharAt(12,'@');//修改StringBuffer对象中指定位置处的字符
System.out.println(s);//I LOVE WORLD@
}
}
与String的相同点: 都用于处理文本数据
不同点:其实在上面也已经提到过了。String定义的字符串是一个常量,一旦创建,其长度和内容都是不可变的。如果想要对字符串进行修改的话,只能创建新的字符串。而StringBuffer避免了这个问题,他是可变的,可以通过相应的方法直接在原对象上进行操作。

被折叠的 条评论
为什么被折叠?



