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