emmmm…由于我一开始对String 、StringBuffer有点混乱,不清楚什么情况下用哪个,所以这里专门写一篇博客加深理解。
在上一篇博客中我讲了String类的特点,其中有一点就是String类的常量一旦声明,不可改变,如果改变对象内容,改变的只是其引用指向而已,通常来讲,String类的操作比较简单,但是由于String类的不可更改特性,就使得我们在操作的过程中很不方便。
为了方便字符串的修改,提供了StringBuffer类,所以StringBuffer类最显著的特点就是可以更改,因为内部提供了append()方法。
先看一端代码:
public class Test{
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello").append("World");
fun(sb);
System.out.println(sb);
}
public static void fun(StringBuffer temp) {
temp.append("\n").append("www.st.com.cn");
}
}
//输出的结果是:
HelloWorld
www.st.com.cn
String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。
频繁修改字符串的情况考虑使用StingBuffer
。
注意:String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:
- String变为StringBuffer:利用StringBuffer的构造方法或append()方法
- StringBuffer变为String:调用toString()方法
除此之外,StringBuffer类也提供了一些String类中没有的方法,例如:
字符串反转:
public synchronized StringBuffer reverse()
删除指定范围内的数据
public synchronized StringBuffer delete(int start, int end)
插入数据
public synchronized StringBuffer insert(int offset, 各种数据类型 b)
面试题
问:解释一下String类、StringBuffer类以及StringBuilder类的区别:
- String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
- StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作。