string 值型別還是引用型別

2022-09-17 09:27:13 字數 1111 閱讀 1984

大家先來看一下下面的**吧!

1using

system;

2using

system.collections.generic;34

public

class

myclass5,

",a,s);12}

1314

}輸出的是abc,def

我們都知道陣列是引用型別的,請看一下段**:

1using

system;

2class

myclass3;

7int

arr2

=arr1;

8arr1[1] 

=200;9

foreach

(int

i in

arr2)

10console.writeline(i);11}

12}我們都知道值型別如果附值的時候,是把自己的乙個副本附給另乙個變數,之後它們互不影響。而引用型別則是把它在堆疊中的位址複製乙份給另乙個變數,它們的指向仍是一樣的,所以當對乙個變數進行操作的時候會影響到另外乙個變數,所以上例中arr2[1]=200而不是2。所以我們可以暫且認為string是值型別。

下面的一段**再一次說明了它具有值型別的特徵。

1using

system;

2class

myclass38

static

void

main()914

}但實際上string是引用型別的(sorry,我水平有限,沒辦法證明),引用一下msdn上的話:「string 物件稱為不可變的(唯讀),因為一旦建立了該物件,就不能修改該物件的值。看來似乎修改了 string 物件的方法實際上是返回乙個包含修改內容的新 string 物件。」

大家看了這句話是不是有種恍然大悟的感覺了?讓我把它說的更通俗點吧「重新賦值,就是在堆中重新分一塊記憶體給它放新的值即重新new了乙個物件,而不是覆蓋原先的值是.而原先的值將等著cg來**。」

那如果你想定義經常變的字串,用string類的話,如果cg不能夠及時**,那不是很占用記憶體嗎?

所以ms推薦了另乙個類:類.

所以我個人對string的理解是,它是乙個引用型別的,只不過是它擁有了值型別的特徵!

關於string是值型別還是引用型別

當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...

關於string是值型別還是引用型別

當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...

String是值型別還是引用型別(C )

msdn 中明確指出 string 是引用型別而不是值型別,但 string 表面上用起來卻像是值型別,這又是什麼原因呢?首先從下面這個例子入手 值型別 int a 1 int b a a 2 console.writeline a is b is a,b 引用型別 string str1 ab s...