學習java還是大學時,早已忘得隻知道java是sun公司的開源程式設計語言了,當我想重新撿起來時,發現沒東西可以從記憶裡撿,後悔已是無用,還是踏實的拿起書,重新開始吧!
今天看了關于java參數傳遞的知識,把這些記下來,做為筆記,如果哪位大蝦發現下面内容有問題,請一定給我指出,不能讓我在錯誤的路上走下去,多謝啦!
1、原始資料類型(primitive type)作為參數傳遞
根據資料顯示,java中原始資料類型傳遞時是傳值。實驗一下,代碼如下:
public class parameterpassingasprimitivetype
{
public static void main(string args[])
{
int inttype = 13;
system.out.println("修改原始類型參數值前:inttype = " + inttype);
changevalue(inttype);
system.out.println("修改原始類型參數值後:inttype = " + inttype);
}
public static void changevalue(int inttype)
inttype = 14;
}
輸出結果:
修改原始類型參數值前:inttype = 13
修改原始類型參數值後:inttype = 13
由此可以看出,傳入的值是原始值(inttype)的一個副本,在函數中修改了參數不會影響到原始值。
2、對象作為參數傳遞
先看代碼:
public class parameterpassingasobject
stringbuffer aobject = new stringbuffer("good");
system.out.println("修改對象前aobject = " + aobject);
changvalue(aobject);
system.out.println("修改對象後aobject = " + aobject);
public static void changvalue(stringbuffer bobject)
bobject.append(" affternoon");
}
運作結果如下:
修改對象前aobject = good
修改對象後aobject = good affternoon
看輸出,對象被修改了,可以被了解為傳址(傳引用)了?是否真是這樣呢?看一下下面的代碼再說:
public class parameterpassingasobjectother
system.out.println("修改對象之前aobject = " + aobject);
changevalue(aobject);
system.out.println("修改對象之後aobject = " + aobject);
public static void changevalue(stringbuffer bobject)
bobject = new stringbuffer("new");
bobject.append(" world");
本段代碼的運作結果:
修改對象之前aobject = good
修改對象之後aobject = good
看到了,在這裡,對象作為參數傳遞,這裡傳的又是“值”,因為函數沒有将對象的成員的值改變,這點把我困惑了。查找資料,找到如下解釋:java中對象作為參數傳遞時,是把對象在記憶體中的位址拷貝一份傳遞給了函數,如果在函數中修改了對象的成員的值,修改生效,函數調用結束後,成員的值為新值;如果把對象指向一個其它的對象,函數調用結束後,原來對象的引用并不指向新的對象,故在上段代碼中,對象已經指向了新的對象,是以新值并不會作用到原來的對象上。
實際上,記憶體位址也是一個整數,在對象作為參數傳遞時,傳記憶體位址的拷貝,實際上也算做傳“值”。