天天看點

javaSE06基礎-對象與引用-基本類型和引用類型的差別

面向對象2

對象與引用

引用對象:Java語言中除基本資料類型之外的變量類型都稱為引用類型.

java中的對象是通過引用對其操作的

例如:我們有一個自定義類為Car(汽車類)

class Car{
  String color;       
  String name;
  String model;
}      

Car car= new Car();

e通常把這條語句的動作稱之為建立一個對象,其實,它包含了三個動作。

解釋

  • 右邊的" new Car()" 是以car類為模闆,調用car類的構造函數,在對空間裡建立一個car類對象
  • 左邊"car car" 建立一個car類引用變量,所謂Car類的引用,就是以後可以用來指向car對象的對象引用
  • = 操作使對象引用指向剛建立的那個car對象

Car car;一是對象引用變量,

car= new Car();一是對象本身。

javaSE06基礎-對象與引用-基本類型和引用類型的差別

基本類型和引用類型的差別

基本資料類型 引用資料類型
概念 變量(單純的值) 對象(引用)
儲存位置 在棧中存值 在棧中存引用,在堆中存具體對象的屬性值

值傳遞與引用傳遞

值傳遞:(形式參數類型是基本資料類型)實參傳遞給形參的是值 形參和實參在記憶體上是兩個獨立的變量 對形參做任何修改不會影響實參

public class Demo1 {
        public static void main(String[] args) {
                int b =20;
                change(b);// 實參  實際上的參數
                System.out.println(b);
        }
        public static void change(int a){//形參  形式上的參數
                a=100;
        }
}      

結果:20

可以了解為:小明去餐廳吃飯,看見别人點的紅燒肉挺好吃,九把服務員叫過來,說我要一份紅燒肉,服務員從後廚拿來一份紅燒肉,小明吃完了,但是他吃的紅燒肉跟旁邊那個人吃的是一份嗎?當然不是。

javaSE06基礎-對象與引用-基本類型和引用類型的差別

引用傳遞:實參傳遞給形參的是參數, 對于堆記憶體上的引用位址, 實參和形參在記憶體上指向了同一塊區域 對形參的修改會影響實參

public class Demo1 {
        public static void main(String[] args) {
                int [] a={1,2,3};
                System.out.println(a[0]);
                change(a);
                System.out.println(a[0]);
        }
        public static void change(int[] a ){
                a[0]=100;
        }
}      

結果:1 100

javaSE06基礎-對象與引用-基本類型和引用類型的差別

由于引用傳遞,傳遞的是位址,方法改變的都是同一個位址中的值,

原來a[0]指向0x13位址,值是1,

後來在a[0] 指向的也是0x13位址,将值變成了100

是以,再查詢a[0]的值的時候,值自然變成了100

通俗點的講法就是:

小明回到家,他妻子說:冰箱二層有一隻雞,你去做了;

小明做好了,叫妻子過來吃飯。

這個時候,他妻子現在看見的雞和她買回來的一樣嗎?

當然不一樣,都做熟了;

什麼意思呢?

雞就是資料

冰箱二層就是存儲資料的位址