淺談值類型與引用類型的區別
我們將我們之前學的數據類型劃分成兩撥:
值類型
所有的數值類型(long
int short byte ulong uint ushort sbyte decimal double float)、bool、char、枚舉、結構
引用類型
string字符串、 數組、類
劃分依據: 他們在內存中存儲的結構不同
a. 相同點:
無論是值類型的變量還是引用類型的變量, 變量始終是開辟在棧空間中的.
b. 不同點:
值類型的變量真實的值 直接存儲在 值類型的變量之中.
引用類型的真實的值(對象) 是存儲在 堆空間之中. 引用類型的變量之中存儲的是 真實的值(對象)在空間中的地址.
在這裡強調一下: 無論是什麼類型的變量之間相互賦值, 都是將源變量的值拷貝1份,將這個副本賦值給目標變量.
a. 值類型的變量在相互賦值的時候,是對1個變量的值進行修改,不會影響另外1個變量的值.
b. 引用類型的變量之間相互賦值,兩個引用類型的變量實際上指向了同1個堆空間中的地址(對象),對1個變量進行修改 會影響另外的1個變量
特別注意的是:string是一種特殊的引用類型,string在內存中存儲時按照引用類型的存儲. 但是在賦值的時候不是這樣的,是由於字串符的恆定性造成的。