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


Java中的堆(Heap)是一個運行時數據區,用來存放類的對象;棧(Stack)主要存放基本的數據類型(int、char、double等8種基本數據類型)和對象句柄。

例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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM