基本資料型別與引用資料型別,及記憶體分配

dhzbkj發表於2018-05-31

 1.型別(沒有string)
八種基本資料型別分別是:int、short、float、double、long、boolean、byte、char;預設值與型別有關
它們的封裝類分別是:Integer、Short、Float、Double、Long、Boolean、Byte、Character。引用資料型別預設為null
基本型別值:儲存在棧記憶體中的簡單資料段,即這種值完全儲存在記憶體中的一個位置。
引用型別值:變數在棧中僅僅是儲存引用型別變數的地址,而其本身則儲存在堆中。

對基本資料型別封裝(wrapper類)之後,封裝類可以有方法和屬性,然後就可以利用這些方法和屬性來處理資料,比如Ingeter對象中有parseInt(String s),可以把字串轉換為int型別等。我們都知道有些型別的資料會有預設值,基本資料型別跟封裝型別的預設值是不一樣的,比如int i  ,如果不賦值i預設為0;但Integer j ,如果不賦值,則j 為null;因為封裝類產生的是物件,物件預設值為null。

2.String類
java.lang.String類為final型別,即不可被繼承、修改。String類屬於特殊的引用型別,在棧空間引用,堆空間保持資料。

例:String a = "a"; // 假設 a 指向地址 0x0001

String 型別的變數通常有兩種賦值方式:一種直接賦值,例如String a = "hello world";另一種是用構造方法,例如 String b = new String ("hello world");

3.堆與棧

 

記憶體分配

動態

類載入中系統靜態分配

回收

回收機制

記憶體自動釋放

操作方式

連結串列

申請方式

New ,malloc,delet,free

存放函式的引數值,區域性變數值,main,

大小限制

向高地址擴充套件的資料結構,是不連續的記憶體區域

Windows下,向低地址擴充套件的資料結構,是一塊連續記憶體區域,棧大小固定。

 

有記憶體地址值

 

 

實體是封裝資料,有預設值

 

 

一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容有程式設計師安排。

棧:在函式呼叫時第一個進棧的是主函式中後的下一條指令(函式呼叫語句的下一條可執行語句)的地址然後是函式的各個引數,在大多數的C編譯器中,引數是由右往左入棧,然後是函式中的區域性變數。 注意靜態變數是不入棧的。當本次函式呼叫結束後,區域性變數先出棧,然後是引數,最後棧頂指標指向最開始存的地址,也就是主函式中的下一條指令,程式由該點繼續執行。

4.靜態儲存區:記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。它主要存放靜態資料、全域性資料和常量

5.基本資料型別和字串型別間轉換
       基本資料型別轉成字串
            a. 基本資料型別+“”
            b.基本資料型別.toString(基本資料型別值),例Integer.toStirng(35);
     字串轉基本資料型別
            xxx a=Xxx.parseXxx(String)     例:int Integer.parseInt("123");
             double b=Double.parseDouble("12.32");
            boolean b=Boolean.parseBoolean("true");   
    非靜態方法
            Integer i=new Integer("123");
            int num=i.intValue();

相關文章