Java之StringBuffer
一、
String类缺少字符串的修改功能,所以提供了StringBuffer类。
StringBuffer要像普通的类那样进行对象的创建,然后进行调用方法的处理;
- 构造方法:public StringBuffer();
- 构造方法:public StringBuffer(String s); // 可以接收初始化的内容
- 数据追加:public StringBuffer append(数据类型 变量); //可以是任何类型的数据,并且因为返回值是StringBuffer,所以可以进行无限的追加,append()相当于字符串中的" + "操作
package Demo_2_3_StringBuffer; public class Main { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Hi!"); // 接收初始化内容的构造方法 change(sb); System.out.println(sb); } public static void change(StringBuffer tem){ // 改变字符串 tem.append("HelloWolrd!"); } }
输出结果:
输入可以使用字符串的修改,但是在实际情况中并不会使用得特别多,只是保证在字符串的修改功能上不会出现空缺。
String中字符串的"+"在编译后都变成了StringBuffer的append()方法,并且StringBuffer和String类的对象之间本来就可以互相转换:
- String类对象变为StringBuffer类可以依靠StringBuffer的构造方法或者使用append()方法;
- 所有的类对象都可以通过toString()方法转换为String类型。
在StringBuffer类中还提供了一些String类中,没有的方法:
- 插入数据:public StringBuffer insert(int offset,数据类型b);
public class Main {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append(".com").insert(0,"www.").insert(4,"baidu"); // 指定索引位置插入数据
System.out.println(buf);
}
}
- 删除指定范围的数据: public StringBuffer delete(int start, int end);
public class Main { public static void main(String[] args) { StringBuffer buf = new StringBuffer(); buf.append(".com").insert(0,"www.").insert(4,"baidu"); // 指定索引位置插入数据 System.out.println(buf); buf.delete(0,5); // 删除指定索引范围的数据 System.out.println(buf); } }
- 内容反转:public StringBuffer reverse( );
package Demo_2_3_StringBuffer; public class Main { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Hi!"); // 接收初始化内容的构造方法 change(sb); System.out.println(sb); StringBuffer buf = new StringBuffer(); buf.append(".com").insert(0,"www.").insert(4,"baidu"); // 指定索引位置插入数据 System.out.println(buf); buf.delete(0,5); // 删除指定索引范围的数据 System.out.println(buf); buf.reverse(); System.out.println(buf); // 字符串的反转 } }
在JDK1.5以后出现了一个与StringBuffer类功能相同的类--StringBuilder,那么两者的区别是什么呢?
StringBuffer类中的方法属于线程安全的,全部使用了synchronized关键字定义,而StringBuilder类属于非线程安全类。
面试题:
请解释String、StringBuffer、StringBuilder的区别?
- String类是字符串的首选类型,其最大的特点是内容不允许修改;
- StringBuffer 与 StringBuilder类的内容允许修改;
- StringBuffer是在JDK1.0的时候提供的,属于线程安全类,而StringBuilder是在JDK1.5的时候提供的,属于非线程安全类。