String与StringBuffer的区别,String的内容是不能修改的,只能改变引用地址的位置,而StringBuffer的内容是可以改变的。
StringBuffer实现的接口CharSequence
CharSequence cs=“hello”; //子类对象为父类实例化
StringBuffer的构造方法 public StringBuffer(CharSequence seq) ;
注意:String与StringBuffer都属于CharSequence 接口子类,但是这两个类的对象不能够直接转换。
将String变成StringBuffer:利用StringBuffer的构造、append()方法
代码实现:
public class Test02 {
public static void main(String[] args) {
String str="hello";
//利用StringBuffer的构造方法将String转换为StringBuffer
StringBuffer buf=new StringBuffer(str);
System.out.println(buf);
System.out.println("-----------");
//利用StringBuffer的append()方法将String转换为StringBuffer
buf.append(str);
System.out.println(buf);
}
}
将StringBuffer变成String:所有对象都有一个将对象变成String的方法,使用toString();
StringBuffer的特有方法
1、支持字符串反转
public StringBuffer reverse()
2、删除指定范围的数据
public StringBuffer delete(int start, int end)
3、插入数据
public StringBuffer insert(int offset,数据类型 数据)
public class Test02 {
public static void main(String[] args) {
String str="hello";
//利用StringBuffer的构造方法将String转换为StringBuffer
StringBuffer buf=new StringBuffer(str);
System.out.println(buf);
System.out.println("-----------");
//利用StringBuffer的append()方法将String转换为StringBuffer
buf.append(str);
System.out.println(buf);
//reverse()字符串逆转
System.out.println(buf.reverse());
//delete(1, 3)删除字符串索引从1到3的字符(包前不包后)
System.out.println(buf.delete(1, 3));
//insert(2, "你好")从字符串索引2的位置插入"你好"
System.out.println(buf.insert(2, "你好"));
}
}
请解释String、StringBuffer、StringBuilder之间的区别?
1、String内容不可以修改,StringBuffer与StringBuilder的内容可以修改
2、StringBuffer的方法都是由synchronized关键字修饰,属于同步方法线程安全。
StringBuilder属于异步方法,线程不安全
1、相同点:
String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder
2、不同点:
String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用
StringBuffer:线程安全(StringBuffer中的方法中加synchronized锁),多线程建议使用这个,修改值时实际上是修改底层的char数组,相比String,开销更小