JAVA實值型別和參考型別的區別

來源:互聯網
上載者:User

標籤:void   布爾   inter   自動清理   new t   棧空間   機制   引用傳遞   bsp   

java這兩種資料類型分別有哪些?

java 中的資料類型分為兩大類:實值型別(基礎資料型別 (Elementary Data Type))和參考型別(複合資料型別) 
一:實值型別:

  整數類型(byte,short,int,long)     浮點類型(float,double)   布爾類型(boolean)      字元類型(char) 

二:引用實值型別:

       除了實值型別外就是引用實值型別了,引用實值型別有   類類型(class)     數組      介面類型(interface)

實值型別和參考型別的區別

值傳遞和引用傳遞 
基礎資料型別 (Elementary Data Type)的賦值是值傳遞,當實值型別變數a賦值給實值型別變數b之後,再去改變a的值那麼b不會隨著a的改變而改變。

int a=1;int b=a;a=2;System.out.println("a:"+a+"b:"+b);

引用實值型別的賦值是引用傳遞,傳遞的是對象的引用地址。當引用實值型別變數a賦值給引用實值型別變數b之後,再去改變a的值那麼b會隨著a的改變而改變。

public class Test(){    int num;    public Test(int num){        this.num=num;    }    public void steNum(int num){        this.num=num;    }    public static void main(String args[]){        Test ta= new Test(1);        Test tb= new Test();        tb=ta;        ta.setNum(2);        System.out.println("ta:"+ta.num+"tb:"+tb.num);    }}

2 記憶體配置 
之所以會出現以上的現象是因為,實值型別資料和參考型別資料在在Java中的記憶體配置不一樣。 
實值型別資料是直接儲存在棧中,Java JVM直接在棧中給資料開闢了一塊空間,直接儲存資料的值。

int a=1;  //JVM為變數a在棧中開闢了一塊空間(假設為A),棧中儲存的是 1;int b=a;  //JVM為變數b在棧中開闢另了一塊空間(假設為B),棧中儲存的也是 1; a=2;      //為變數a重新賦值,棧空間A中儲存的值改為2,棧空間B中儲存的值不變為1

參考型別資料並不是直接儲存在棧中,Java JVM會在堆中給資料分配記憶體空間,堆儲存資料。棧儲存的是指向對應堆的地址。可以說是棧中的地址引用了堆中的資料。

Test ta= new Test(1);/* JVM為ta變數在堆中開闢一塊空間(假設為K),那麼堆空間K儲存的是 1;JVM為ta變數在棧中開闢一塊空間(假設為A),那麼棧空間A儲存的是指向堆空間的地址(假設為1000)*/Test tb= new Test(0);/* JVM為tb變數在堆中開闢一塊空間(假設為J),那麼堆空間J儲存的是 0;JVM為ta變數在棧中開闢一塊空間(假設為B),那麼棧空間B儲存的是指向堆空間的地址(假設為2000)*/tb=ta;/*棧空間B中儲存的地址從2000改為1000(從指向J改為指向K)  現在ta 和 tb 都引用堆空間K*/ta.setNum(2);/*堆空間K中儲存的值改為2 所以ta.num和tb.num 都是2 */
記憶體回收機制

當堆空間儲存的對象沒有被棧空間中儲存的地址所指向時(引用時),該對象會被自動清理掉。如前面提到的堆空間J中本來儲存著 0

Test tb= new Test(0);

但是

tb=ta;

   不再有地址指向堆空間J中本來儲存的0,0會被自動清楚。

JAVA實值型別和參考型別的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.