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

C# string 類型賦值問題 (2) — 字串駐留與 Equals 多載

     編輯:關於C語言

Equals 三個多載


public override bool Equals(object obj);
public bool Equals(string value);
public static bool Equals(string a, string b);

前兩個實例方法內部呼叫 CompareOrdinal 逐字元比較。第三個靜態方法先檢查參考是否相同 (ReferenceEquals),相同則直接返回 true,不再逐字元比較。

字串駐留機制

CLR 內部維護一個字串駐留表 (內部雜湊表),Key 為字串內容,Value 為堆上 String 物件參考。

  1. 編譯期:JIT 編譯方法時掃描字面常數,首次遇到 "abc" 在堆上建立 String 物件並加入駐留表。
  2. 再次遇到相同字面常數 "abc",直接複用駐留表中參考,不建立新物件。
  3. 執行期:變數指派字面常數時,從駐留表取得參考,故 s1 與 "abc"、s2 與 "abc" 指向同一個物件。

string str1 = "abc";
string str2 = "abc";
// str1 和 str2 指向同一個駐留字串物件
Object.Equals(str1, str2) // true (參考相同)

注意事項

  • 僅字面常數 自動駐留。執行期動態產生的字串 (如 StringBuilder、string.Concat、讀取檔案) 不會 自動駐留,除非呼叫 string.Intern。
  • C# 不允許 new string(...) 建立 String 物件 (編譯錯誤),String 為不可變參考型別,語言層面強制使用字面常數或工廠方法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved