1. 程式人生 > >String類與StringBuffrer類兩者的不同之處

String類與StringBuffrer類兩者的不同之處

@1:String表示的是字串常量,string類中內容一旦被初始化,其內容和長度就不能被更改。 說到這裡,可能有人就會疑惑了,

不是可以通過String類的replace()等方法來改變其內容和長度?
如:
String str="abc";
System.err.println(str.replace("b", "12345"));
輸出結果:a12345c

String str="abc";
str="aaaa!";
System.err.println(str);
輸出結果:aaaa!

這裡的字串長度和內容不是都已經該變了嗎?,那豈不是和String類的特性相違背了

其實這裡的改變並不是真正的改變,改變後的字串是屬於一個新的字串了,為什麼這樣說呢,

因為String物件str在初始化的時候,記憶體就會為其分配一個空間用於儲存它的值,
在執行str="aaaa!";語句後,記憶體就會將其作為一個新的String物件重新為其分配一處空間來儲存它的值,
而原來的String物件的值還存在於記憶體中,沒有發生任何改變。

那為什麼輸出的結果是“aaaa!”而不是“abc”?

因為str只是一個String物件的引用指向,開始時指向"abc",
在建立了新的String物件後,該指向就指向了這個新的String的值"aaaa!",

所以輸出的結果是"aaaa!"而不是"abc"

@1:StringBuffer類彌補了String類的內容不能被修改的這個不足之處,StringBuffer類(又稱字元緩衝區)表示的字元容器,其內容及長度可以被修改的,修改後不會產生新的StringBuffer物件

@2:String類覆蓋了Object類的equals()方法,而StringBuffer類沒有

String s1="好好學習!";
String s2="好好學習!";
System.out.println(s1.equals(s2));
StringBuffer sb1=new StringBuffer("天天向上!");
StringBuffer sb2=new StringBuffer("天天向上!");
System.out.println(sb1.equals(sb2));

輸出結果:
true
false

@3:String類可以通過’+'對兩個String物件進行拼接,而StringBuffer類不可以

String s1="好好學習,";
String s2="天天向上!";
System.out.println(s1+s2);  //輸出結果:好好學習,天天向上!
StringBuffer sb1=new StringBuffer("好好學習,");
StringBuffer sb2=new StringBuffer("天天向上!");
System.out.println(sb1+sb2); //此處報錯