簡單講就是一個是常量,一個是變量。
String是不可變類,String對象一旦創建,其值就不能被改變,重新賦值其實是兩個對象。
比如說:
String str = “aaaa”; 相當於str是一個常量, 當對str進行操作的時候,比如 str += “bbbb”; 它不是簡單的在”aaaa”後面加上”bbbb”, 而是在內存中重新開一個空間,先拷貝”aaaa”再接着拷貝”bbbb”組成新的 字符串”aaaabbbb”,並把這個字符串的引用重新賦值給str, 也就是說,對於一個String對象引用,你最好就只是取用它, 一旦你對它進行任何操作都將導致引用本身改變,而且還有很高的代價。
StringBuffer是可變類,對象被創建後仍然可以對其值進行修改。
另外一個區別,實例化String時,可以利用構造函數(String s = new String(“sss”)
)的方式來初始化或者用賦值(String = “sss”
)的方式初始化。
StringBuffer只能通過構造函數(StringBuffer s = new StringBuffer(“bbb”)
)的方式初始化。