基本資料型別與引用資料型別的不同

2021-08-06 00:14:09 字數 834 閱讀 4356

基本資料型別在被建立時,在棧上給其劃分一塊記憶體,將數值直接儲存在棧上。

引用資料型別在被建立時,首先要在棧上給其引用(控制代碼)分配一塊記憶體,而物件的具體資訊都儲存在堆記憶體上,然後由棧上面的引用指向堆中物件的位址。

例如,有乙個類person,有屬性name,age,帶有參的構造方法,

person p = new person("zhangsan",20);

在記憶體中的具體建立過程是:

1.首先在棧記憶體中位其p分配一塊空間;

2.在堆記憶體中為person物件分配一塊空間,並為其三個屬性設初值"",0;

3.根據類person中對屬性的定義,為該物件的兩個屬性進行賦值操作;

4.呼叫構造方法,為兩個屬性賦值為"tom",20;(注意這個時候p與person物件之間還沒有建立聯絡);

5.將person物件在堆記憶體中的位址,賦值給棧中的p;通過引用(控制代碼)p可以找到堆中物件的具體資訊。

靜態區:儲存自動全域性變數和 static 變數(包括 static 全域性和區域性變數)。靜態區的內容在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。

堆區:一般由程式設計師分配釋放,由 malloc 系列函式或 new 操作符分配的記憶體,其生命週期由 free 或 delete 決定。在沒有釋放之前一直存在,直到程式結束,由os釋放。其特點是使用靈活,空間比較大,但容易出錯

棧區:由編譯器自動分配釋放,儲存區域性變數,棧上的內容只在函式的範圍內存在,當函式執行結束,這些內容也會自動被銷毀,其特點是效率高,但空間大小有限

基本資料型別與引用資料型別

基本資料型別與引用資料型別 基本資料型別 基本資料型別 大小 範圍 預設值 int 整形 32 2147483648 2147483648 0 long 長整形 64 9233372036854477808 9233372036854477808 0 float 浮點形 32 3.40292347e...

基本資料型別與引用資料型別

byte short int long float double boolean charstring class sun提供的 system.class sun提供的 student.calss 程式設計師自定義的 user.class 程式設計師自定義的 product.class程式設計師自定...

基本資料型別與引用資料型別

在談深拷貝與淺拷貝之前,我們先來談談js的資料型別,這對接下來了解深拷貝淺拷貝起到一定的作用。棧記憶體棧是自動分配相對固定大小的記憶體空間,而且由系統自動釋放的。棧是線性結構,後進先出。基本資料型別 null undefined number string boolean symbol es6 基本...