之前對這四個String、StringBuilder昙衅、StringBuffer扬霜、CharSequence的認識不夠清晰,現(xiàn)在再重新深入的去了解下他們而涉。
首先CharSequence可以說是另外三個的老大著瓶,CharSequence本身是一個接口(去掉了原本的注釋):
/**
* This interface represents an ordered set of characters and defines the
* methods to probe them.
*/
public interface CharSequence {
public int length();
public char charAt(int index);
public CharSequence subSequence(int start, int end);
public String toString();
}
這就是CharSequence的源碼,String啼县、StringBuilder材原、StringBuffer都是實現(xiàn)了CharSequence這個接口而來的,所以他們都有這四個方法季眷。上面的源碼中可以看到最后一個方法toString()方法华糖,說明StringBuilder、StringBuffer都可以轉成String瘟裸。
StringBuilder和StringBuffer我們一般都會用來拼接字符串,StringBuilder和StringBuffer的初始大小都是16诵竭,我們也可以按需求來自己定義大小话告。StringBuffer是線程安全的,StringBuilder是線程不安全的卵慰,所以單線程使用StringBuilder多線程使用StringBuffer沙郭,StringBuilder的性能也會高于StringBuffer。
我們平時有很多時候可能會直接使用加號來進行字符串拼接,如果字符串是已知的那么會在編譯期以StringBuilder#append的形式編譯裳朋,但是如果字符串是獲取的是未知的病线,那么會無端創(chuàng)建很多不必要的對象,占用內存鲤嫡,所以盡量不要使用加好來拼接字符串送挑。