3 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
1、速度上的區(qū)別
值類型存取速度快,引用類型存取速度慢。
2、用途上的區(qū)別
值類型表示實(shí)際數(shù)據(jù),引用類型表示指向存儲(chǔ)在內(nèi)存堆中的數(shù)據(jù)的指針或引用。
3、來源上的區(qū)別
值類型繼承自System.ValueType,引用類型繼承自System.Object
4、位置上的區(qū)別
值類型的數(shù)據(jù)存儲(chǔ)在內(nèi)存的棧中,引用類型的數(shù)據(jù)存儲(chǔ)在內(nèi)存的堆中,而內(nèi)存單元中只存放堆中對(duì)象的地址。
5、類型上的區(qū)別
值類型的變量直接存放實(shí)際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對(duì)象的引用。
6、保存位置上的區(qū)別
值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實(shí)際數(shù)據(jù)的地址保存在堆棧中,而實(shí)際數(shù)據(jù)則保存在堆中。
例如:
字符串類型,而堆棧則用于存儲(chǔ)固定長度的數(shù)據(jù),如整型類型的數(shù)據(jù)int(每個(gè)int變量占用四個(gè)字節(jié))。
由數(shù)據(jù)存儲(chǔ)的位置可以得知,當(dāng)把一個(gè)值變量賦給另一個(gè)值變量時(shí),會(huì)在堆棧中保存兩個(gè)完全相同的值;而把一個(gè)引用變量賦給另一個(gè)引用變量,則會(huì)在堆棧中保存對(duì)同一個(gè)堆位置的兩個(gè)引用,即在堆棧中保存的是同一個(gè)堆的地址。
在進(jìn)行數(shù)據(jù)操作時(shí),對(duì)于值類型,由于每個(gè)變量都有自己的值,因此對(duì)一個(gè)變量的操作不會(huì)影響到其它變量;對(duì)于引用類型的變量,對(duì)一個(gè)變量的數(shù)據(jù)進(jìn)行操作就是對(duì)這個(gè)變量在堆中的數(shù)據(jù)進(jìn)行操作,
如果兩個(gè)引用類型的變量引用同一個(gè)對(duì)象,實(shí)際含義就是它們?cè)诙褩V斜4娴亩训牡刂废嗤?,因此?duì)一個(gè)變量的操作就會(huì)影響到引用同一個(gè)對(duì)象的另一個(gè)變量。

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
每一個(gè)值類型都有一個(gè)獨(dú)立的內(nèi)存區(qū)域保存自己的值,調(diào)用它的時(shí)候調(diào)用的是他的值,而應(yīng)用類型調(diào)用的是內(nèi)存中的地址。
比如a1=18,這時(shí)候在內(nèi)存中保存的是18,當(dāng)把a(bǔ)1賦值給a2的時(shí)候,他們兩個(gè)引用的是同一個(gè)內(nèi)存空間,a2的值會(huì)保存為a1的值,當(dāng)把a(bǔ)2改為20后,因?yàn)閍1和a2引用的是同一個(gè)內(nèi)存地址,所以a1也變成20,這是引用類型。
值類型是當(dāng)把a(bǔ)1賦值給a2時(shí),會(huì)為a2再開一塊新的內(nèi)存空間保存a1的值。當(dāng)把a(bǔ)2改成20時(shí),只會(huì)在a2的空間保存20,和a1沒關(guān)系了。
- 3 回答
- 0 關(guān)注
- 3266 瀏覽
添加回答
舉報(bào)