1. 程式人生 > >Java中的基本類型和引用類型變量的區別

Java中的基本類型和引用類型變量的區別

new jre ear ref 數據 這一 對象類型 完成 值傳遞

基本類型:

基本類型自然不用說了,它的值就是一個數字,一個字符或一個布爾值。

引用類型:

是一個對象類型,值是什麽呢?它的值是指向內存空間的引用,就是地址,所指向的內存中保存著變量所表示的一個值或一組值。

舉例說明:

int a;
a=250; //聲明變量a的同時,系統給a分配了空間。

引用類型就不是了,只給變量分配了引用空間,數據空間沒有分配,因為誰都不知道數據是什麽,整數,字符?我們看一個錯誤的例子:

MyDate today;

today.day = 4; //發生錯誤,因為today對象的數據空間未分配。

那我們怎麽給它賦值?引用類型變量在聲明後必須通過實例化開辟數據空間,才能對變量所指向的對象進行訪問。舉個例子:

MyDate today; //將變量分配一個保存引用的空間

today = new MyDate(); //這句話是2步,首先執行new MyDate(),給today變量開辟數據空間,然後再執行賦值操作

//引用變量賦值

MyDate a,b; //在內存開辟兩個引用空間

a = new MyDate(); //開辟MyDate對象的數據空間,並把該空間的首地址賦給a

b = a; //將a存儲空間中的地址寫到b的存儲空間中

如下圖示

技術分享

引用傳遞 和 值傳遞

引用類型:除了在函數傳值的時候是"引用傳遞",在任何用"="向對象變量賦值的時候都是"引用傳遞"。

值傳遞:基本類型的傳遞都屬於值傳遞,和C語言一樣,當把Java的基本數據類型(如 int,char,double等)作為入口參數傳給函數體的時候,傳入的參數在函數體內部變成了局部變量,這個局部變量是輸入參數的一個拷貝,所有的函 數體內部的操作都是針對這個拷貝的操作,函數執行結束後,這個局部變量也就完成了它的使命,它影響不到作為輸入參數的變量。這種方式的參數傳遞被稱為"值 傳遞"。

技術分享
/*define a class*/
class MyDate{
    String  Year;
    String  Month;
    String  Day;
    String  Date;
    public MyDate(){
        Year = "1900";
        Month ="01";
        Day = "01";
        Date = Year + "." + Month + "."+ Day;
    }
     public String toString(){
        return Date;
    }   
}

public class ObjRef{  
   MyDate mydate1 = new MyDate();
   MyDate mydate2 = mydate1;// = 使 mydate1和 mydate2將指向同一內存空間
   //MyDate mydate2 = new MyDate();//從新new一個對象,則mydate1和mydate2是指向不同的內存空間的:
                                  //引用空/間和數據空間都不一樣
   public void changeObj(MyDate inObj){
        inObj.Date = "2007.09.26";
    }
      
    public static void main(String[] args) {
        ObjRef oRef = new ObjRef();
        System.out.println("Before call changeObj() method: " + oRef.mydate1);
        oRef.changeObj(oRef.mydate1);
        System.out.println("After call changeObj() method: " + oRef.mydate1);
        System.out.println("After call changeObj() method: " + oRef.mydate2);//驗證“= mydate1和 mydate2將指向同一內存空間“這一結論
      
    }
}

Java中的基本類型和引用類型變量的區別