这是最快的存储区,由于它位于不一样于其余存储区的地方——处理器内部。可是寄存器的数量极其有限,因此寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感受到寄存器存在的任何迹象。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 }