国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

值類型和引用類型

2019-11-14 13:58:24
字體:
供稿:網(wǎng)友

先簡單介紹一下它們:

嚴格來說應(yīng)該是下面的這些:值類型包括:結(jié)構(gòu)體(數(shù)值類型,bool型,用戶定義的結(jié)構(gòu)體),枚舉,可空類型。

引用類型包括:數(shù)組,用戶定義的類、接口、委托,object,字符串

為什么要設(shè)計值類型:

  1. 值類型不需要從托管堆分配
  2. 引用類型產(chǎn)生的實例對象在托管堆上都會有一些額外的成員,這些成員必須初始化
  3. 值類型不使用GC垃圾回收控制,作用域結(jié)束后,會自行釋放。

     綜上,值類型更有效率,所以在.NET中將一些簡單的,常用的,內(nèi)存占用小的對象設(shè)置為值類型,大大提高了整個CLR的效率。

 

裝箱與拆箱:

     為什么會發(fā)生裝箱:

         因為值類型與引用類型在CLR中的內(nèi)存管理方式不同,所以當(dāng)值類型在程序中需要向引用類型轉(zhuǎn)化的時候就會發(fā)生裝箱。也就是當(dāng)值類型的實例對象需要在一個程序作用域的場景下,轉(zhuǎn)化成為不從System.ValueType繼承的另外一個類型的對象時,裝箱就會發(fā)生。

      裝箱有什么危害:

          因為設(shè)計值類型的本意是為了提升效率。但是當(dāng)裝箱發(fā)生時,值類型會轉(zhuǎn)化成為引用類型,這個時候,效率沒有得到任何提高。反而因為裝箱,拆箱有可能重復(fù)多次的發(fā)生,反而讓效率更受影響。

 

 

值類型和引用類型的區(qū)別:

1.    值類型的數(shù)據(jù)存儲在內(nèi)存的棧中;引用類型的數(shù)據(jù)存儲在內(nèi)存的堆中,而內(nèi)存單元中只存放堆中對象的
地址。

2.     值類型存取速度快,引用類型存取速度慢。

3.     值類型表示實際數(shù)據(jù),引用類型表示指向存儲在內(nèi)存堆中的數(shù)據(jù)的指針或引用

4.     值類型繼承自System.ValueType,引用類型繼承自System.Object

5.     棧的內(nèi)存分配是自動釋放;而堆在.NET中會有GC來釋放       

6.      值類型的變量直接存放實際的數(shù)據(jù),而引用類型的變量存放的則是數(shù)據(jù)的地址,即對象的引用。


7. 值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實際數(shù)據(jù)的地址保存在堆棧中,而實際

數(shù)據(jù)則保存在堆中。注意,堆和堆棧是兩個不同的概念,在內(nèi)存中的存儲位置也不相同,堆一般用于存儲

可變長度的數(shù)據(jù),如字符串類型;而堆棧則用于存儲固定長度的數(shù)據(jù),如整型類型的數(shù)據(jù)int(每個int變量

占用四個字節(jié))。由數(shù)據(jù)存儲的位置可以得知,當(dāng)把一個值變量賦給另一個值變量時,會在堆棧中保存兩

個完全相同的值;而把一個引用變量賦給另一個引用變量,則會在堆棧中保存對同一個堆位置的兩個引用

,即在堆棧中保存的是同一個堆的地址。在進行數(shù)據(jù)操作時,對于值類型,由于每個變量都有自己的值,

因此對一個變量的操作不會影響到其它變量;對于引用類型的變量,對一個變量的數(shù)據(jù)進行操作就是對這

個變量在堆中的數(shù)據(jù)進行操作,如果兩個引用類型的變量引用同一個對象,實際含義就是它們在堆棧中保

存的堆的地址相同,因此對一個變量的操作就會影響到引用同一個對象的另一個變量。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 循化| 闽侯县| 大新县| 公安县| 河津市| 镇江市| 海门市| 潞西市| 泰来县| 陈巴尔虎旗| 博爱县| 门头沟区| 宜章县| 湘阴县| 广饶县| 怀仁县| 徐水县| 息烽县| 黄山市| 鹤峰县| 建平县| 延边| 澄城县| 天台县| 清丰县| 合山市| 贵南县| 白山市| 河北区| 陕西省| 庄河市| 新蔡县| 阳朔县| 湘西| 阜新市| 茂名市| 西昌市| 宝坻区| 肥乡县| 五大连池市| 张家界市|