String、StringBuffer与StringBuilder
一、 CharSequence
CharSequence指的就是字符串:String、StringBuffer与StringBuilder
二、String与StringBuffer类
1、String类的特点:
- 每一个字符串的常量都属于一个String类的匿名对象,并且不可更改。
- String有两个常量池:静态常量池和运行时常量池。
- String类对象实例化建议使用直接赋值的形式,这样可以直接保存对象到对象池中。
2、String的弊端:内容不可更改。
3、StringBuffer可以实现字符串的修改,掌握以下几种StringBuffer提供的方法:
- 构造方法:public StringBuffer();
- 构造方法:public StringBuffer(String str); 接收初始化字符串的内容
- 数据追加:public StringBuffer append(数据类型 变量); 相当于字符串中“+”操作
实例:
public class DateDemo{
public static void main(String[] args){
StringBuffer buf = new StringBuffer("Hello ");
change(buf);
System.out.printIn(buf.toString());
}
public static void change(StringBuffer temp){
temp.append("World!");
}
}
// 执行结果:Hello World!
4、String中的“+”与StringBuffer中的append()的关系:
- 所有的“+” 在编译之后都会变为StringBuffer中的append()方法。
- String类对象变为StringBuffer可以依靠StringBuffer类的构造方法或者使用append方法。
5、所有的类对象都可以通过toString()方法将其变为String类型。
6、StringBuffer中常用的方法:
- 插入数据:public StringBuffer insert(int offset,数据类型 b);
public class DateDemo{
public static void main(String[] args){
StringBuffer buf = new StringBuffer();
buf.append(".cn").inset(0,"www.").insert(4,"gggko");
System.out.printIn(buf)
}
}
// 执行结果:www.gggko.cn
- 删除指定范围的数据:public StringBuffer delete(int start,int end);
public class DateDemo{
public static void main(String[] args){
StringBuffer buf = new StringBuffer();
buf.append("Hello World!").delete(6,12);
System.out.printIn(buf);
}
}
// 执行结果:Hello !
- 字符串反转:public StringBuffer reverse();
public class DateDemo{
public static void main(String[] args){
StringBuffer buf = new StringBuffer();
buf.append("Hello World!").reverse();
System.out.printIn(buf);
}
}
// 执行结果:!dlroW olleH
三、StringBuilder类
StringBuilder类与StringBuffer类功能类似,StringBuilder类是在JDK1.5之后提供的,该类中的提供的方法与StringBuffer类的方法相同,两者最大的区别是StringBuffer类中的方法时线程安全的,全部使用了synchronized关键字,而StringBuilder是线程不安全的。
四、总结
面试题与笔试题:请解释String、StringBuffer与StringBuilder的区别?
String类是字符串的首选类型,其最大的特点是内容不允许修改;
StringBuffer与StringBuilder类的内容允许修改;
StringBuilder是在JDK1.0的时候提供的,属于线程安全的操作,StringBuilder是在1.5之后提供的,是线程不安全的操作。