Java字符串大家庭主要包括 String StringBuilder StringBuffer
String
String 是一个不可变类,创建方式有2种,如下:
String a = "hello"; // a 字符串存放在字符串常量池中
String b = new String("hello"); //b 字符串存放在堆中
String 既然是一个不可变的,那么如何进行拼接操作呢?那就需要借助StringBuiler 了。
既然String是不可变的,那它一定是个线程安全的类。
StringBuiler
下面我们修改一个字符串
String a = "hello";
String b = a + "abc";
其实现方式其实是如下的:
String a = "hello";
StringBuilder s = new StringBuilder(a); //将String字符串放入到StringBuilder对象中
s.append("abc"); //将 abc 拼接到 hello 上
return s.toString(); //返回一个字符串结果
StringBuilder 不是一个线程安全的类。在单线程下会快于StringBuffer。
StringBuffer
由于String方法对字符串的拼接修改等操作过于复杂,这时候StringBuffer就该站出来了。
StringBuffer 是一个字符串缓冲区,并且是一个可变类。所以我们可以直接在当前的StringBuffer中进行字符串的操作,不会进行其他的复杂操作,如下
StringBuffer s = new StringBuffer("hello"); //初始化一个缓冲区
s.append("abc"); //将字符串加入缓冲区
并且StringBuffer是一个线程安全的,在多线程情况下。操作数据量大的字符串的时候StringBuffer是一个不错的选择。