(接上文)
3、String、StringBuffer 與StringBuilder
String 字符串常量
StringBuffer 字符串變量(線程安全)
StringBuilder 字符串變量(非線程安全)
看一個栗子:
用字符數組value創建一個String對象 private final String(char[] value);
1 char[] value = {"a","b","c","d"};
2 String str4 = new String(value);//相當於String str4 = new String("abcd");
字符串的本質是字符數組,因爲有final修飾,所以String類的對象是不可改變的。所以每次修改String對象的值時,實際上是生成了一個新的對象,而指針指向了新的String對象;所以經常改變內容的字符串最好不要用 String ,因爲只要改變就會變成新的對象,創建對象的過程是很消耗性能的,每次生成對象都會對系統性能產生影響。
StringBuffer:如果是使用 StringBuffer 類則結果就不一樣了,每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。 字符串對象經常改變的情況下推薦使用 StringBuffer類。String的大多數方法StringBuffer都可以使用,除此之外還增加了String沒有的插入和刪除字符串的方法。
StringBuffer buf=new StringBuffer("abc");
String s1=buf.toString(); //轉換爲String類
buf.append("abc"); //在字符串後面追加abc ,相當於String中 +“abc”
buf.insert(0,"abc"); //在開頭位置插入abc
buf.delete(0,5) //刪除下標從0到5且不包含5的字符
buf.setCharAt(1,’D’); //則對象buf的值將變成”aDc”
StringBuilder 被設計用作 StringBuffer 的一個簡易替換,兩者的方法基本相同,由於沒有對方法進行加同步鎖,所以它是非線程安全的。但在字符串緩衝區被單個線程使用的時候,處理的效率更高。