1.person p=new person();//定義乙個物件,且使用new關鍵字在堆記憶體中開闢空間。
宣告 person p=null;//在棧記憶體中宣告,只開闢了棧記憶體空間,物件無法使用。
例項化物件:new person();//在堆記憶體總開闢空間,方可使用。
總結就是:1.物件是儲存在棧記憶體中,屬性儲存在堆記憶體中。
2.程式執行中有兩個儲存空間可用,乙個是棧,是歸屬於程序本身的,另外乙個是堆,所有程序共用的。
區域性變數在宣告週期為函式內部,其儲存空間位於棧中。當進入函式時,會對根據區域性變數需求,在棧上申請一段記憶體空間,供區域性變數使用。當區域性變數生命週期結束後,在棧上釋放。
由於程序的棧空間是有限的,所以要避免申請占用空間過大的區域性變數,以及避免函式巢狀層數過多。這些都可能引起棧空間不夠導致程式崩潰。
總結:成員變數初始化後存放在堆記憶體中;區域性變數 初始化後存在棧記憶體中。
class t
3.使用物件必須進過例項化(new 開闢堆記憶體空間)後才可使用。基本資料型別的預設值為0,引用資料型別的值為null;
4.案例一 string例項化的兩種方式
1.直接賦值: string str="hello"; string str2="hello";
2.通過new 關鍵字開闢兩個空間:string str=new string(「hello」);
5.案例二 string的兩種比較方式
1.一般基本輸資料型別比較用「==」號,二引用資料型別比較,也可以用「==」,比較的是記憶體位址值;
2.「equals」比較的是兩個物件的內容;
string str1=「hello」;
string str2=「hello」;
string str3=str2;
system.out.println(str1=str2);//f
system.out.println(str2=str3);//t,str2.str3指向了同乙個位址
Java中堆記憶體和棧記憶體詳解
類的成員變數都在堆上,只有方法裡面定義的基礎變數,在方法裡面定義的引用 其他物件的引用放在棧上 這個時候被引用的物件和它的成員變數還是在堆上 也就是說,執行緒上下文的東西在棧上,其他統統在堆上。1.暫存器 最快的儲存區,由編譯器根據需求進行分配,我們在程式中無法控制。2.棧 存放基本型別的變數資料和...
堆記憶體和棧記憶體
堆 順序隨意 棧 先進後出 堆和棧的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧 2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不...
堆記憶體和棧記憶體
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式 類似於資料結構中的棧 2 堆區 heap 一般由程式設計師分配釋放 若程式設計師不釋放,程式結束時可能由 os 注意它與資...