C 值傳遞引用型別資料的問題

2021-08-30 20:02:41 字數 724 閱讀 5823

今天做了道題,大概可以簡化如下

public class c

public int i = -1;

public c(int i)

this.i = i;

public static void set(c c)

c.i = 0;

c = new c(13);

class program

static void main(string args)

c c = new c(12);

c.set(c);

console.writeline(c.i.tostring());

console.read();

輸出是多少?

我選擇的12,但是結果是0。原因解釋:

這裡傳入的是引用,在複製的過程中,複製了指向呼叫者的物件的引用。 這裡傳入的其實是乙個引用,在複製的過程中,複製了指向呼叫者的物件的引用,在呼叫set()方法與呼叫者指向同乙個物件,所以可以改變狀態資料,但是在呼叫的方法體內,重新例項化,卻是不行的。andrew troelsen的書中寫道:if a reference type is passed by value, the callee may change the values of the object』s state data but not the object it is referencing. 如果按值傳遞引用型別,被呼叫者可能改變物件的狀態資料的值,但不能夠改變所引用的物件。

C 值傳遞引用型別資料的問題

今天做了道題,大概可以簡化如下 public class c public int i 1 public c int i this.i i public static void set c c c.i 0 c new c 13 class program static void main strin...

關於C 值型別,引用型別,值傳遞,引用傳遞

說到引數傳遞,必須得弄清值型別和引用型別 為了容易表達,我暫且命名存放在堆中的內容為堆中物件,存放在棧上的內容為棧中物件。值型別存放在棧中,直接訪問。如果有 int a 0 int b a 就產生了兩個棧中物件。引用型別需要在堆中顯式分配,且不能直接訪問,需要在棧中分配乙個棧中物件 c 叫指標,c ...

值傳遞和引用傳遞的問題

先看看下面這段 的輸出結果 public class example public static void main string args public void change string str,char ch 結果是 tarena and gbc 解釋 1.為什麼string字串的值是不可變...