StringBuffer 类
一、String类特点:
1.对于Java类库的学习首先明确一点:
要学会查询文档。
2.任何的字符串常量都是String对象,String常量一旦声明则不可改变,如果改变对象的内容改变的是其引用的指向。
二、StringBuffer使用
1.String的使用比较简单,但是String这种不可更改的缺点并不好,为了方便字符串的修改专门提供有一个StringBuffer类,而在String类使用的是“+”来进行字符串的连接,但是这个操作在StringBuffer类里面需要更换为append(数据类型 b)方法
范例:
StringBuffer使用
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
StringBuffer buf =new StringBuffer(); // 建立一个StringBuffer类对象
buf.append("hello").append("world");
fun(buf); // 修改了StringBuffer的内容
System.out.println(buf);
}
Public static void fun(StringBuffer temp){
temp.append("\n").append("www.mldn.cn");
}
}
三、String与StringBuffre的区别
1.String与StringBuffre最大的区别:
String的内容无法修改,而StringBuffer的内容可以修改。
注:在开发中优先选择String类,频繁修改才会使用StringBuffer。
例:
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
StringBuffer buf = new StringBuffer();// 建立一个StringBuffer类的对象
buf.append("hello").append("world");
String str ="hello"+"world" ;
for (int x = 0 ; X < 10000 ;x++) {
buf.append(x) ;
}
}
}
2.观察String与StringBuffer的继承结构:
| String类 | StringBuffer类 |
|---|---|
| Public final class Stringextends ObjectImplements Serializable, Comparable, CharSequence | Public final class StringBufferextends ObjectImplements Serializable, CharSequence |
两个类都是“CharSeqence”接口子类。这个接口描述的是字符集,所以字符串属于字符集的子类,证明以后看见了CharSeqence最简单的联想就是个字符串:
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
CharSequence seq = "hello"; //字符串,子类为父接口实例化
}
}
3.观察StringBuffer类的构造方法:public StringBuffer(CharSequence seq)
注:虽然String和StringBuffer都属于CharSequence接口的子类,但是这两个类的对象不能直接转换如果要转换,可以采用如下原则:
- String变StringBuffer:利用StringBuffer的构造,append()方法;
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
String str = "hello"; //字符串,子类为父接口实例化
StringBuffer buf = new StringBuffer(str);
System.out.println(buf);
}
}
或者
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
String str = "hello"; //字符串,子类为父接口实例化
StringBuffer buf = new StringBuffer();
buf.append(str);
System.out.println(buf);
}
}
- StringBuffer变为String:所有对象都有一个将对象变为String的方法,使用toString()方法。
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
String str = "hello"; //字符串,子类为父接口实例化
StringBuffer buf = new StringBuffer();
buf.append(str);
System.out.println(buf.toString());
}
}
4.实际上StringBuffer还是有一些String类没有的特点:
- StringBuffer支持字符串反转:public StringBuffer reverse()
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
StringBuffer buf = new StringBuffer("HelloWorld") ;
System.out.println(buf.reverse());
}
}
- 删除指定范围的数据:public StringBuffer delete(int start,int end)
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
StringBuffer buf = new StringBuffer("HelloWorld") ;
System.out.println(buf.delete(5,10));
}
}
- 插入数据:public StringBuffer insert(int offset,数据类型 b)
package cn.mldn.demo;
public class TestDemo{
public static void main(String[] args) throws Exception {
StringBuffer buf = new StringBuffer("HelloWorld") ;
System.out.println(buf.delete(5,10).insert(0,"你好"));
}
}
四、面试题:
请解释String、StringBuffer、StringBuilder的区别:
- String的内容不可修改,StringBuffer与StringBuilder的内容可以修改。
- StringBuffer采用同步处理,属于线程操作,而StringBuilder采用异步处理,属于线程不安全操作。
五、总结:
任何时候优先考虑String、StringBuffer,而StringBuilder只是备选方案