1. 程式人生 > >String類物件兩種建立方法的區別

String類物件兩種建立方法的區別

  java將記憶體分為四種:堆、棧、方法體、程式計數器。一般基本資料型別存放在棧中,物件型別存放在堆中。

建立String字串的方法兩種。無論哪種方法建立的字串都是不可以改變的。先來看方法一:

String a="hello";


這種方法建立字串後會有一個字串池來儲存內容,而棧空間存的是這個字串的地址。這種方法建立的字串在作為函式引數時是值傳遞。

第二種方法:

String b=new String("java");

這種方法在建立字串對像的同時,還會在String pool中建立一個物件。因此執行了上面語句後實際上建立了兩個物件。


但是這種方法建立的字串在傳遞時是引用傳遞。本應傳遞引用,但String 是不可變物件,所以在其值建立後,無法對其值做修改,所以跟值傳遞一個效果。

順便記錄下以前的一個疑惑:

String a="hello";
a="java";

執行完上述語句後,輸出a結果是:java。這是否說明String的字串建立後是可以改變的呢?答案是否定的。

其實,a從hello變為java不是hello被改成了java,而是系統又建立了一個物件,內容為java,a只是從指向hello變為指向java而已。

下節:String類中判斷物件關係時“==”和equals()的區別。