歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java的堆(Heap)和棧(Stack)的區別

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

日期:2017/3/1 9:27:48   编辑:Linux編程

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。

Copyright © Linux教程網 All Rights Reserved