- C#實踐教程(第2版)
- 李乃文
- 769字
- 2021-03-19 18:15:36
2.6 裝箱和拆箱
裝箱和拆箱是一個抽象的概念,通過裝箱和拆箱的功能,可以允許值類型的任何值與Object類型的值相互轉(zhuǎn)換,將值類型和引用類型連接起來。
2.6.1 裝箱
裝箱是值類型到Object類型或到此值類型所實現(xiàn)的任何接口類型的隱式轉(zhuǎn)換,用于在垃圾回收堆中存儲值類型。
裝箱實際上是指將值類型轉(zhuǎn)換為引用類型的過程,裝箱的執(zhí)行過程大致可以分為以下三個階段:
(1)從托管堆中為新生成的引用對象分配內(nèi)存。
(2)將值類型的實例字段拷貝到新分配的內(nèi)存中。
(3)返回托管堆中新分配對象的地址,該地址就是一個指向?qū)ο蟮囊昧恕?/p>
如下代碼演示了如果將int類型的變量val進行裝箱操作,然后將裝箱后的值進行輸出:
int val = 100; object obj = val; //裝箱 Console.WriteLine (“對象的值 = {0}", obj); //輸出結(jié)果
裝箱操作生成的是全新的引用對象,這會損耗一部分的時間,因此會造成效率的降低,所以應(yīng)該盡量避免裝箱操作。一般情況下,符合下面的情況時可以實施裝箱操作:
□ 調(diào)用一個含Object類型的參數(shù)方法時,該Object可以支持任意的類型以方便通用,當(dāng)開發(fā)人員需要將一個值類型(如Int32)傳入時就需要裝箱。
□ 使用一個非泛型的容器,其目的是為了保證能夠通用。因此可以將元素類型定義為Object,于是如果要將值類型數(shù)據(jù)加入容器時需要裝箱。
2.6.2 拆箱
拆箱也叫取消裝箱,它是與裝箱相反的操作,它是從Object類型到值類型或從接口類型到實現(xiàn)該接口的值類型的顯式轉(zhuǎn)換。
拆箱實際上是指從引用類型到值類型的過程,拆箱的執(zhí)行過程大致可以分為以下兩個階段:
(1)檢查對象實例,確保它是給定值類型的一個裝箱值。
(2)將該值從實例復(fù)制到值類型變量中。
如下示例代碼演示了基本的拆箱操作:
int val = 100; object obj = val; //裝箱 int num = (int) obj; //拆箱 Console.WriteLine ("num: {0}", num); //輸出結(jié)果
注意
當(dāng)一個裝箱操作把值類型轉(zhuǎn)換成一個引用類型時,不需要顯式地強制類型轉(zhuǎn)換;而拆箱操作把引用類型轉(zhuǎn)換到值類型時,由于它可以強制轉(zhuǎn)換到任何可以相容的值類型,所以必須顯式地強制類型轉(zhuǎn)換。
- 程序員面試筆試寶典(第3版)
- CockroachDB權(quán)威指南
- Scratch 3游戲與人工智能編程完全自學(xué)教程
- Podman實戰(zhàn)
- 機器學(xué)習(xí)與R語言實戰(zhàn)
- 代替VBA!用Python輕松實現(xiàn)Excel編程
- 一步一步跟我學(xué)Scratch3.0案例
- Python+Office:輕松實現(xiàn)Python辦公自動化
- Apache Solr PHP Integration
- AutoCAD基礎(chǔ)教程
- DevOps 精要:業(yè)務(wù)視角
- 計算機應(yīng)用基礎(chǔ)(Windows 7+Office 2010)
- Opa Application Development
- Flask Web開發(fā)實戰(zhàn):入門、進階與原理解析
- jQuery權(quán)威指南