1. 程式人生 > >new String建立了幾個物件

new String建立了幾個物件

String str = new String(“abc”)  到底建立了幾個物件?

首先String str是定義了一個字串變數,並未產生物件,=不產生物件,那麼只有後面的new String("abc")了。把它拆分成"abc"和new String(),首先在字串常量池去尋找有沒有"abc"這個字串,沒有就建立一個“abc”字串物件在棧中,然後new String把這個字串物件拷貝一份到堆中,返回這個物件的引用。所以一共產生兩個物件

試問str變數儲存在堆中還是棧中?關鍵點是區分str是成員變數還是區域性變數,如果是區域性變數在方法體內,它就儲存在棧中,如果是成員變數那麼久跟隨成員物件儲存在堆中。比如

class A{
String str = new String(“abc”) 
public void getA(){
return str;
}
}
以上變數str儲存在堆中
class A{
public void getA(){
String str = new String(“abc”) 
return str;
}
}
以上變數str儲存在棧中

String str = "a"+"b";產生幾個物件?答案是3個,字串常量區儲存"a","b","ab"三個物件

String str = "a"+new String("b");產生幾個物件?答案是3個,字串常量區儲存"a","b",堆中儲存new String("b")的物件。

宣告:

只有使用引號包含文字的方式建立的String物件之間使用“+”連線產生的新物件才會被加入字串池中。對於所有包含new方式新建物件(包括null)的“+”連線表示式,它所產生的新物件都不會被加入字串池中