Java的堆(Heap)和棧(Stack)的區別

來源:互聯網
上載者:User

標籤:

Java中的堆(Heap)是一個運行時資料區,用來存放類的對象;棧(Stack)主要存放基本的資料類型(int、char、double等8種基礎資料型別 (Elementary Data Type))和物件控點。

例1

        int a=5;        int b=5;        System.out.println(a==b);

以上例子中,編譯器首先處理int a=5,首先在棧中建立一個引用a,然後在棧中尋找是否有5這個值,如果有,則將a指向5,如果沒有,則建立一個5,再將a指向5。當處理int b=5時,由於棧中肯定已經存在5,直接將b指向5,這樣a和b都指向5,因此a==b為true。

例2

        int a=5;        int b=5;        System.out.println(a==b);                b=6;        System.out.println(a==b);

以上例子中,給b重新賦值以後,a和b不是指向同一個值,因此第一個a==b為true,第二個a==b為false。

例3

        String a="ABC";        String b="ABC";        String c=new String("ABC");        String d=new String("ABC");        System.out.println(a==b);        System.out.println(a==c);        System.out.println(c==d);

以上例子中,String是一種對象,因此存放在堆中,給a和b賦值的過程和例1差不多,只不過是在堆中進行的。c和d使用了關鍵字new,因此不管值是否相等,都在堆中建立一個值,因此輸出結果為true,false,false。

Java的堆(Heap)和棧(Stack)的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.