C#里把數(shù)據(jù)類型分為兩大類,值類型和引用類型
值類型
值類型就是包含實(shí)際數(shù)據(jù)的量,當(dāng)定義一個(gè)值類型的變量時(shí),C#會根據(jù)聲明的類型,以棧的方式分配存儲區(qū)給這個(gè)變量,變量的讀寫操作就直接在這塊區(qū)域進(jìn)行
值類型包括 :基本數(shù)據(jù)類型(int double 等),結(jié)構(gòu),枚舉
引用類型
一個(gè)引用類型的變量,不存儲他們所代表的真實(shí)數(shù)據(jù),而是存儲真實(shí)數(shù)據(jù)的引用。引用類型分兩步創(chuàng)建,1,首先在棧上創(chuàng)建引用變量,然后在堆上創(chuàng)建對象本身,再把這個(gè)內(nèi)存的句柄(內(nèi)存的地址)賦給引用變量
引用類型包括:接口,數(shù)組,Object類型,類,委托,字符串,Null類型
總結(jié)
1.值類型存儲在內(nèi)存的棧中,引用類型存儲在內(nèi)存的堆中
2.值類型存取速度快,引用類型存取速度慢
3.值類型表示實(shí)際的數(shù)據(jù),引用類型表示指向內(nèi)存堆中的指針或者引用
4.值類型繼承自System.ValueType,引用類型繼承自System.Object
5.棧的內(nèi)存分配自動釋放;而堆在C#中需要GC釋放