基本型別:
基本型別自然不用說了,它的值就是一個數字,一個字元或一個布林值。
引用類型:
是物件類型,值是什麼呢?它的值是指向記憶體空間的引用,就是位址,所指向的記憶體中保存著變數所表示的一個值或一組值。
範例說明:
int a;
a=250; //宣告變數a的同時,系統則分配了空間給a。
引用類型就不是了,只給變數分配了引用空間,資料空間沒有分配,因為誰都不知道資料是什麼,整數,字元?我們來看一個錯誤的例子:
MyDate today;
today.day = 4; //發生錯誤,因為today物件的資料空間未分配。
那我們要怎麼給它賦值?引用類型變數在宣告後必須透過實例化開啟資料空間,才能對變數所指向的物件進行存取。舉個例子:
MyDate today; //將變數分配一個已儲存引用的空間
today = new MyDate(); //這句話是2步,先執行新 MyDate(先執行newnewDate(首先執行newnewDate ),給today變數開闢資料空間,然後再執行賦值運算
//引用變數賦值
MyDate a,b; 如此1 #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中的基本型別變數和參考型別變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!