值型別與引用型別的區別

2022-06-24 02:33:10 字數 2424 閱讀 9964

1、值型別:

包括:sbyte、short、int、long、float、double、decimal(以上值型別有符號)

byte、ushort、uint、ulong(以上值型別無符號)

bool、char

2、引用型別:

包括:物件型別、動態型別、字串型別

1、值型別:

byte b1 = 1

;byte b2 =b1;

console.writeline(",。

", b1, b2);

b2 = 2

;console.writeline(",。

", b1, b2);

console.readkey();

解釋:

byte b1 = 1;宣告b1時,在棧內開闢乙個記憶體空間儲存b1的值1。

byte b2 = b1;宣告b2時,在棧內開闢乙個記憶體空間儲存b1賦給b2的值1。

console.writeline(",。", b1, b2);輸出結果為1,1。

b2 = 2;將b2在棧中儲存的值1改為2。

console.writeline(",。", b1, b2);輸出結果為1,2。

2、引用型別:

string str1 = new

string ;

string str2 =str1;

for (int i = 0; i < str1.length; i++)

console.writeline();

for (int i = 0; i < str2.length; i++)

console.writeline();

str2[

2] = "d"

;for (int i = 0; i < str1.length; i++)

console.writeline();

for (int i = 0; i < str2.length; i++)

console.readkey();

解釋:

string str1 = new string ;宣告str1時,首先在堆中開闢乙個記憶體空間儲存str1的值(假設:0a001),然後在棧中開闢乙個記憶體空間儲存0a001位址

string str2 = str1;宣告str2時,在棧中開闢乙個記憶體空間儲存str1賦給str2的位址

for (int i = 0; i < str1.length; i++)

console.writeline();

for (int i = 0; i < str2.length; i++)

console.writeline();

輸出結果為:

a b c

a b c

str2[2] = "d";修改值是修改0a001的值

for (int i = 0; i < str1.length; i++)

console.writeline();

for (int i = 0; i < str2.length; i++)

輸出結果為:

a b d

a b d

3、string型別:(特殊)

string str1 = "

abc"

;string str2 =str1;

console.writeline(",。

", str1, str2);

str2 = "

abd"

;console.writeline(",。

", str1, str2);

console.readkey();

解釋:

string str1 = "abc";宣告str1時,首先在堆中開闢乙個記憶體空間儲存str1的值(假設:0a001),然後在棧中開闢乙個記憶體空間儲存0a001位址

string str2 = str1;宣告str2時,首先在堆中開闢乙個記憶體空間儲存str1賦給str2的值(假設:0a002),然後在棧中開闢乙個記憶體空間儲存0a002的位址

console.writeline(",。", str1, str2);輸出結果為:

abcabc

str2 = "abd";修改str2時,在堆中開闢乙個記憶體空間儲存修改後的值(假設:0a003),然後在棧中修改str2位址為0a003位址

console.writeline(",。", str1, str2);輸出結果為:

abcabd

堆中記憶體空間0a002將被垃圾**利用。

以上是我對值型別與引用型別的理解,希望可以給需要的朋友帶來幫助。

值型別與引用型別區別

凡是直接繼承自system.valuetype的都是值型別,其他就是引用型別 區別就是乙個是傳值,乙個是傳引用 c 中值型別與引用型別的值傳遞與引用傳遞 值型別 結構體,數值型別 int,double,char,bool型,列舉,可空型別 nullable 引用型別 陣列,使用者定義的類 介面 委託...

值型別與引用型別的區別

1.值型別儲存的是數值,引用型別儲存的是位址。2.值型別存放在棧中,引用型別存放在堆中。3.值型別不可以是null,引用型別可以使null。4.值型別不具有多型性,引用型別具有多型性。5.值型別沒有繼承性,引用型別有繼承性。6.值型別有裝箱與未裝箱,引用型別只有裝箱。using system usi...

C 值型別與引用型別的區別

net將資料型別分為值型別 value type 和引用型別 reference type 乙個具有值型別 value type 的資料存放在棧 內的乙個變數中。即是在棧中分配記憶體空間,直接儲存所包含的值,其值就代表資料本身。值型別的資料具有較快的訪問速度。乙個具有引用型別 reference t...