String和StringBuffer的區別

2022-09-14 00:33:23 字數 1087 閱讀 1354

相信大家都有用過string和stringbuffer吧,但是具體兩者之間有什麼區別呢?

其實很簡單,就乙個區別,那就是string宣告之後的值是不可修改的,而stringbuffer是可以修改的。

這個時候應該會有反對意見了吧,因為會說string定義之後的值是可以修改的,如下 

public class test{

public static void main(string args){

string str="hello ";

str+="world!!";

system.out.println(str);

通過以上的代表進行編譯之後,會發現出現的結果是:

hello world!!

很明顯,這個時候string中的值就已經改變了,但這只是顯示的值改變了,堆中的數值是否改變了呢?請看下圖:

其實string也是乙個類,裡面也存在著自己的構造方法,然而當我們用string str=「hello」的時候,定義的」hello」就相當於乙個匿名物件,所以一開始會在棧中定義乙個str物件,並在堆中開闢乙個空間,存放「hello」,當我們執行到str+=「world」的時候,出現了「world」,所以堆中會開闢乙個新的空間來存放「world」,而通過「+」連線成的新的字串「hello world」也是乙個匿名物件,所以也會在堆中開闢乙個空間來存放,而這個時候str已經執行了「hello world」了,根據乙個棧物件不能同時指向兩個堆記憶體空間,所以str要斷開與「hello」的連線,重新指向「hello world」,所以這個時候在控制台輸出的時候就會輸出「hello world」了。

在開發中,應該盡量避免如下的操作 

public static void main(string args){

string str="hello ";

for(int i=0;i<100;i++){

str+=i;

system.out.println(str);

因為即使能完成自己想要的功能,但是在堆中是要斷開100次連線的,這樣的操作效能是很低的。

String和string的區別

msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string 對映為 framework的 string。如...

String和string的區別

最近老看見有人在論壇上問string和string有什麼區別,答案五花八門差點兒沒讓我背過氣去,乾脆放到blog上來,論壇上就貼位址了 首先,在一般情況下,string和string是一樣的,但是他們也存在如下區別 1 string始終代表 system.string 1.x 或 system.st...

String和string的區別

msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string對映為framework的string。如果用s...