按值 按引用和作為輸出變數傳遞陣列引數

2021-04-02 11:39:03 字數 924 閱讀 4573

在c#中,類是引用型別的資料型別,而陣列在c#中被定義類型別,所以陣列也是引用型別。當把乙個陣列變數傳遞給乙個方法時,方法有可能會改變我們引用的陣列的內容——即使是按值傳遞。但這並不意味著因為陣列是引用型別,按值傳遞就和按引用傳遞的結果一樣。

示例:static void main()

;passbyvalues(names);

console.writeline(names[0]);

names = new string ;

passbyreference(ref names);

console.writeline(names[0]);

names = new string ;

passasoutput(out names);

console.writeline(names[0]);

}public static void passbyvalues(string n);}

public static void passbyreference(ref string n);}

public static void passasoutput(out string n);}

先說第二和第三個方法,在第二個方法裡,引數按引用傳遞,用乙個新的陣列代替了原來了陣列,所以其輸出值為julie。在第三個方法裡,變數作為輸出變數傳遞,行為上像按引用傳遞,但在方法中訪問輸出引數的乙個未賦值的元素會造成編譯錯誤(這裡有點奇怪,明明傳遞進去的是已經賦過值的names,怎麼會未賦值呢?)。

總結一下,陣列作為引數在按值傳遞時,由於陣列本身是引用型別,所以形參在方法被呼叫時將和實參引用同一塊記憶體,但當使用new語句時,會將形參引用到其它地方,與實參脫離關係;在按引用傳遞時,形參和實參自始至終引用同一塊記憶體;以輸出變數的形式傳遞時,形參初始化時是乙個空引用,要在方法裡為其申請記憶體,在方法返回時將才將實參引用到形參引用的記憶體從而實現輸出功能。

按值傳遞和按引用傳遞

對於基本型別而言,是按值傳遞的 基本型別儲存在棧中 基本型別引數的傳遞和基本型別的複製一樣,傳遞的是值本身 var a 1 function test x test a console.log a 1按值傳遞的意思就是形參是實參的複製,形參實參互不干擾 so,雖然在函式test中a被修改,但是並沒有...

Java按值傳遞和按引用傳遞

如果傳遞引數是基本型別或其包裝類,則按值傳遞,改變引數的值,實際引數的值不變。public static void main string args public static void changei integer i 如果傳遞引數是類或陣列,則按引用傳遞,改變物件的引用,實參的引用不會改變,但...

JavaScript 按值傳遞 按引用傳遞

1 值的比較 引用的比較 首先,原始值的比較是值的比較 只有在它們值相等的時候它們才相等 比如簡單的 var a1 10 var a2 10 console.log a1 a2 true 其次,物件的比較並非值的比較 物件的比較均是引用的比較,當且僅當它們引用同乙個基物件時,它們才相等。即使兩個物件...