1. 值類型的數據存儲在內存的棧中;引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的
地址。指針
2. 值類型存取速度快,引用類型存取速度慢。對象
3. 值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針或引用繼承
4. 值類型繼承自System.ValueType,引用類型繼承自System.Object內存
5. 棧的內存分配是自動釋放;而堆在.NET中會有GC來釋放 字符串
6. 值類型的變量直接存放實際的數據,而引用類型的變量存放的則是數據的地址,即對象的引用。
7. 值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實際數據的地址保存在堆棧中,而實際變量
數據則保存在堆中。注意,堆和堆棧是兩個不一樣的概念,在內存中的存儲位置也不相同,堆通常用於存儲引用
可變長度的數據,如字符串類型;而堆棧則用於存儲固定長度的數據,如整型類型的數據int(每一個int變量數據
佔用四個字節)。由數據存儲的位置能夠得知,當把一個值變量賦給另外一個值變量時,會在堆棧中保存兩內存分配
個徹底相同的值;而把一個引用變量賦給另外一個引用變量,則會在堆棧中保存對同一個堆位置的兩個引用字符
,即在堆棧中保存的是同一個堆的地址。在進行數據操做時,對於值類型,因爲每一個變量都有本身的值,
所以對一個變量的操做不會影響到其它變量;對於引用類型的變量,對一個變量的數據進行操做就是對這
個變量在堆中的數據進行操做,若是兩個引用類型的變量引用同一個對象,實際含義就是它們在堆棧中保
存的堆的地址相同,所以對一個變量的操做就會影響到引用同一個對象的另外一個變量。