為了說明這一點,以下代碼示例創建了一個簡單的 Stack 類型,其中包含兩個操作“Push”和“Pop”。Stack 類將其數據存儲在對象類型的數組中,Push 和 Pop 方法使用基本對象類型來接受和返回數據:
public class Stack { private object[] items = new object[100];
public void Push(object data) { ... }
public object Pop() { ... } } 然後,就可以將自定義類型(例如 Customer 類型)壓入堆棧。但是,如果程序需要檢索數據,則需要將 Pop 方法的結果(基本對象類型)顯式轉換成 Customer 類型。
Stack s = new Stack(); s.Push(new Customer()); Customer c = (Customer) s.Pop(); 如果將一個值類型(例如一個整數)傳遞給 Push 方法,運行時會自動將其轉換為引用類型(該過程稱作裝箱),然後將其存儲在內部數據結構中。與此類似,如果程序要從堆棧中檢索一個值類型(例如一個整數),則需要將從 Pop 方法獲取的對象類型顯式轉換成值類型,該過程稱作取消裝箱:
Stack s = new Stack(); s.Push(3); int i = (int) s.Pop(); 值類型和引用類型之間的裝箱和取消裝箱操作非常繁重。