本帖最后由 邵天强 于 2012-11-18 00:28 编辑
java中内存主要包含4块分别是:
(1)堆内存(heap)
(2)栈内存(stack)
(3)静态变量或常量存放的区
(4)方法区
在堆内存中存放的是实例对象,即:new 类(),new出的对象只包含成员变量
在栈内存中,存放的是局部变量,对于基本的数据类型存放的是基本变量的值,而对于对象变量,存放的是堆内存的地址。
在静态变量或常量存放的区中,存放的是静态变量或常量
在方法区中,存放的是对象的方法,因此即使new 出多个对象的方法也是存在一个方法
例如:
class Test{
private String str1;
private String str2;
public void test(){
System.out.println("a");
}
public static void main(String[]args){
Test t=new Test();
}
}
那么对应的内存分配为
则 t是分配在栈内存中。里面存放了一个指向堆内存中存放的new Test()的地址。
new Test()会导致在堆内存中分配一块空间,该内存中的Test对象同时会含有str1和str2。
test()方法会在方法区中分配内存。
如果此时 Test t1 = t;则表示把t的值复制给t1,即t1的值为t中保存的地址
|