這是最快的存儲區,由於它位於不一樣於其餘存儲區的地方——處理器內部。可是寄存器的數量極其有限,因此寄存器由編譯器根據需求進行分配。你不能直接控制,也不能在程序中感受到寄存器存在的任何跡象。app
位於通用RAM中, 存放基本類型的變量數據和對象的引用,但對象自己不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字符串常量對象存放在常量池中)測試
存放全部new出來的對象code
存放靜態成員(static定義的)對象
存放字符串常量和基本類型常量(public static final)內存
若是數據徹底存活於程序以外,那麼它能夠不受程序的任何控制,在程序沒有運行時也能夠存在。字符串
public static void main(String[] args) { // 建立了1個string對象。"apple"存儲在字符串常量池中 , str1 和str2存儲於棧中 String str1 = "apple" ; String str2 = "apple" ; System.out.println(str1==str2);//true // 建立了2個string對象,對象存儲在堆內存中, 引用存於棧中 String str3 = new String("orange" ); String str4 = new String("orange" ); System.out.println(str3==str4);//false . //建立了2個對象。兩個1對象存儲在堆內存中 Integer l1 = new Integer(1); Integer k1 = new Integer(1); System.out.println(l1==k1);//false . // 如下兩條語句建立了2個對象。i1,i2變量存儲在棧內存中,兩個256對象存儲在堆內存中 Integer i1 = 256; Integer i2 = 256; System.out.println(i1==i2);//false }