String类特点:
任何的字符串常量都是String对象,而且String的常量一旦声明则不可改变,如果改变对象内容,改变的是其引用的指向而已。
虽然在很大程度上来讲,String的使用比较简单,但是String这种不可更改的缺点并不好,所以为了方便字符串的修改,专门提供有一个StringBuffer类,而String类里面使用的是“+”来进行的字符串连接,但是这个操作在StringBuffer类里面需要更换为append()方法:
public StringBuffer append(数据类型 b)
例:观察StringBuffer使用
String 与StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容允许修改。但是需要清楚一点,在开发中优先选择的还是String 类。(StringBuffer只有在频繁修改的时候才会使用)
为了更好的理解String与StringBuffer,那么下面来观察这两个类的继承结构:
String类:
public final class String
extends Object
implements Serializable, Comparable, CharSequence
StringBuffer类:
public final class StringBuffer
extends Object
implements Serializable, CharSequence
可以发现两个类都是“CharSequence”接口的子类。这个接口描述的是字符集,所以字符串就属于字符集的子类。
观察StringBuffer类的构造方法:
public StringBuffer(CharSequence seq)
这里一个小小的问题需要注意:虽然String与StringBuffer都属于CharSequence接口的子类,但是这两个类的对象不能够直接转换。所以如果想要转换,可以采用如下原则:
·String变为StringBuffer:利用StringBuffer的构造、append()方法
·StringBuffer变为String:所有对象都有一个将对象变为String的方法,使用toString()方法。
实际上StringBuffer还是有一些String类所没有的特点的:
- 支持字符串反转:public StringBuffer reverse()
- 删除指定范围的数据: public StringBuffer delete(int start, int end)
- 插入数据:public StringBuffer inser(int offset, 数据类型 b)
- 面试题:请解释String 、StringBuilder、 StringBuffer的区别?**
·String的内容不可修改,StringBuilder和StringBuffer的内容可以修改。
·StringBuffer采用同步处理,属于线程安全操作,而 StringBuilder采用异步处理,属于线程不安全操作。
总结:
任何时候优先考虑的还是String ,StringBuilder和StringBuffer只是作为备选方案。