StringBuffer类
StringBuffer和String的区别:
String是一个不可变的字符序列
StringBuffer是一个线程安全的可变的字符序列
StringBuffer的构造方法:
* public StringBuffer():无参构造方法
* public StringBuffer(int capacity):指定容量的字符串缓冲区对象
* public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
StringBuffer的方法:
* public int capacity():返回当前容量。 理论值
* public int length():返回长度(字符数)。 实际值
StringBuffer和 StringBuilder的区别:
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder
。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
StringBuffer的添加功能
public StringBuffer append(String str):
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
(含头,不含尾)
StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):
删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):
删除从指定位置开始指定位置结束的内容,并返回本身(含头,不含尾)
StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str):
从start开始到end用str替换
StringBuffer的反转功能
public StringBuffer reverse():
符串反转
StringBuffer的截取功能
public String substring(int start):
从指定位置截取到末尾
public String substring(int start,int end):
截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意事项
返回值类型不再是StringBuffer本身
StringBuffer和String的相互转换
* A:String -- StringBuffer
* a:通过构造方法
* b:通过append()方法
* B:StringBuffer -- String
* a:通过构造方法
* b:通过toString()方法
* c:通过subString(0,length);
StringBuffer sbBuffer = new StringBuffer("shanzu");
String string = new String(sbBuffer);
System.out.println(string);
String s1=sbBuffer.toString();
System.out.println(s1);
String s2=sbBuffer.substring(0, sbBuffer.length());
System.out.println(s2);
StringBuffer和StringBuilder的区别
* String,StringBuffer,StringBuilder的区别
* StringBuffer和StringBuilder的区别
* StringBuffer是jdk1.0版本的,是线程安全的,效率低
* StringBuilder是jdk1.5版本的,是线程不安全的,效率高
* String和StringBuffer,StringBuilder的区别
* String是一个不可变的字符序列
* StringBuffer,StringBuilder是可变的字符序列
String和StringBuffer分别作为参数传递
形式参数问题
* String作为参数传递
* StringBuffer作为参数传递
基本数据类型的值传递,不改变其值
引用数据类型的值传递,改变其值
String类虽然是引用类型,但是它当作参数传递时和基本数据类型是一样的。
String s="shanzu";
System.out.println(s);
Chang(s);
System.out.println(s);
}
public static void Chang(String string) {
string+="laile";
}
//结果是两次输出皆为shanzu;
//因为s是不变序列,它指向shanzu这个对象
//chang函数执行时,首先传值string = s,此时string指向shanzu对象,当string进行+=操作时,需要重新new一个对象,完成shanzu和laile的拼接,并让string指向shanzulaile。由于string的存活范围只有在chang函数内,所以最后s仍然指向shanzu这个对象。
StringBuffer sb=new StringBuffer();
sb.append("shanzu");
System.out.println(sb);
Chang(sb);
System.out.println(sb);
}
public static void Chang(StringBuffer string) {
string.append("laile");
}
//两个引用(sb、string)皆指向同一个对象