值型別和引用型別

2022-08-23 01:48:22 字數 2891 閱讀 6337

關於值型別與引用型別,值傳遞與引用傳遞的總結筆記。

值傳遞是將變數的乙個副本傳遞到方法中,方法中如何操作該變數副本,都不會改變原變數的值。

在下面的例子中。將變數 a 以值傳遞方式傳給方法 test(),在test執行a++操作時,實際是對a的副本進行操作,main方法中列印a的值,結果仍為 a=1 。

1     class program

2

12

13 //值傳遞

14 static void test(int a)

15

18 }

結果:1

引用傳遞是將變數的記憶體位址傳遞給方法,方法操作變數時會找到儲存在該位址的變數,對其進行操作。會對原變數造成影響。

這裡用「原變數」一詞只是為了與值傳遞進行對比說明,實際上所有方法都是操作同一物件,不應有「原變數」一說。

例子中,將person物件p和變數 a (通過ref關鍵字修飾)以引用傳遞方式傳給方法 test()。在test對變數進行操作時,是通過傳遞過來的位址010x,在堆中找到p,並對其進行操作。所以main函式中再列印結果,已經發生變化。

1     class program

2 ;

7 //通過ref關鍵字,對值型別變數a進行引用傳遞

8 test(ref a,p);

9 console.writeline(a);

10 console.writeline(p.age);

11

12 console.write("press any key to continue . . . ");

13 console.readkey(true);

14 }

15

16 //引用傳遞

17 static void test(ref int a,person p)

18

22

23 }

24

25 class person

26

28 }

結果:2

21

關於值型別與引用型別,值傳遞與引用傳遞的總結筆記。

值傳遞是將變數的乙個副本傳遞到方法中,方法中如何操作該變數副本,都不會改變原變數的值。

在下面的例子中。將變數 a 以值傳遞方式傳給方法 test(),在test執行a++操作時,實際是對a的副本進行操作,main方法中列印a的值,結果仍為 a=1 。

1     class program

2

12

13 //值傳遞

14 static void test(int a)

15

18 }

結果:1

引用傳遞是將變數的記憶體位址傳遞給方法,方法操作變數時會找到儲存在該位址的變數,對其進行操作。會對原變數造成影響。

這裡用「原變數」一詞只是為了與值傳遞進行對比說明,實際上所有方法都是操作同一物件,不應有「原變數」一說。

例子中,將person物件p和變數 a (通過ref關鍵字修飾)以引用傳遞方式傳給方法 test()。在test對變數進行操作時,是通過傳遞過來的位址010x,在堆中找到p,並對其進行操作。所以main函式中再列印結果,已經發生變化。

1     class program

2 ;

7 //通過ref關鍵字,對值型別變數a進行引用傳遞

8 test(ref a,p);

9 console.writeline(a);

10 console.writeline(p.age);

11

12 console.write("press any key to continue . . . ");

13 console.readkey(true);

14 }

15

16 //引用傳遞

17 static void test(ref int a,person p)

18

22

23 }

24

25 class person

26

28 }

結果:2

21

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...

引用型別和值型別

c 中值型別和引用型別作為方法引數傳遞的時候其實都可以說是 值 的傳遞,只不過這裡的 值 指代的東西有所區別。當方法的引數為值型別時,方法傳遞的是值本身的值。當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。舉個引用型別作為引數傳遞的例子 static vo...

值型別和引用型別

為了更好地說明兩種型別之間的區別,借用如下的 來說明 值型別引用型別 記憶體分配地點 分配在棧中 分配在堆中 效率效率高,不需要位址轉換 效率低,需要進行位址轉換 記憶體 使用完後,立即 使用完後,不是立即 等待gc 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...