java 堆和棧的區別


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM