String类与StringBuffer类区别

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采用异步处理,属于线程不安全操作。

你可能感兴趣的:(JAVA)