天天看點

Java參數傳遞

        學習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中對象作為參數傳遞時,是把對象在記憶體中的位址拷貝一份傳遞給了函數,如果在函數中修改了對象的成員的值,修改生效,函數調用結束後,成員的值為新值;如果把對象指向一個其它的對象,函數調用結束後,原來對象的引用并不指向新的對象,故在上段代碼中,對象已經指向了新的對象,是以新值并不會作用到原來的對象上。

        實際上,記憶體位址也是一個整數,在對象作為參數傳遞時,傳記憶體位址的拷貝,實際上也算做傳“值”。