1,在栈中存放的是基本类型变量和对象的引用变量,当一段代码定义一个变量时,java
就在栈内为这个变量分配内存空间,当超过变量的作用域时,java会自动回收分配的内存。
局部变量在栈内存
2,堆内存放的是new创建的对象和数组,有java jvm的垃圾回收器来管理。同时会在栈内
定义一个特殊变量,让这个变量的取值等于数组或对象在堆内的首地址,这个特殊变量就成了引用变量。
成员变量在堆内存
参考:http://www.cnblogs.com/perfy/p/3820594.html
public static void main(String[] args) { int a1 = 10; int a2 = a1; a1 = 1000; System.out.println("a1=: " + a1); System.out.println("a2=: " + a2); String a3 = new String("10"); String a4 = new String(a3); a3 = "1000"; System.out.println("a3=: " + a3); System.out.println("a4=: " + a4); } 运行结果: a1=: 1000 a2=: 10 a3=: 1000 a4=: 10
public class Test { public static void main(String[] args) { Test t = new Test(); Test.Dog d1 = t.new Dog(1);//若看不懂,只需看成创建了一个Dog类一个实例变量 Test.Dog d2 = d1;//把d1赋值个d2,此时d2的age是不是1? d1.age = 10;//重新为d1的age属性赋值成10 //打印结果 System.out.println("dog1's age = " + d1.age); System.out.println("dog2's age = " + d2.age); } //为了节省空间能一眼看完,此处写成内部类 class Dog { //为了方便把属性定义为public,实际中最好不要 public int age; public Dog(int age) { this.age = age; } } } 运行结果:都是10 参考:http://www.cnblogs.com/wangjunxiao/p/5860454.html
http://www.360doc.com/content/08/0829/08/59141_1587076.shtml