首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 進階 (七):型別轉換、裝箱與拆箱核心機制

     編輯:關於C#

C# 裝箱/拆箱、相等比較四大方法深度解析

值型別與參考型別互轉是 C# 核心機制。裝箱將值型別包裝為物件 (參考型別),拆箱則提取回值型別。相等比較有四種方式,語意各異。

一、裝箱與拆箱

  • 裝箱:值型別 → 參考型別 (隱含發生於 ToString()、介面轉換、物件陣列存值型別等)。
  • 拆箱:參考型別 → 值型別 (需顯式轉型)。

int i = 10;
object y = (object)i; // 裝箱:配置堆疊記憶體,複製值
int x = (int)y;       // 拆箱:檢查型別相容,複製值回堆疊

二、四種相等比較方法

方法類型語意特殊行為
ReferenceEquals(a,b)靜態參考相等 (同一記憶體位址)值型別永遠 false (各自裝箱成不同物件)
虛擬 Equals(a,b)虛擬實例值相等 (可覆寫)預設參考相等,String/ValueType 覆寫為值比較
靜態 Equals(a,b)靜態值相等可處理 null (一 null 一不 null 回 false,雙 null 回 true)
運算符 ==運算子介於兩者間值型別比值,參考型別比參考 (String 覆寫為值比較)

三、最佳實務建議

  1. 避免頻繁裝箱/拆箱:使用泛型集合 List<T> 取代 ArrayList,介面約束用 where T : struct。
  2. 自訂型別務必覆寫 Equals、GetHashCode、operator ==、operator !=,確保語意一致。
  3. 字串比較優先用 string.Equals(a,b, StringComparison.Ordinal) 明確指定比較規則。
  4. ReferenceEquals 僅用於確認「是否為同一個物件實例」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved