首先
值不相等 == 和 equal 必然為false 這個不需要讨論
其次
equal 和 “==” 的本身邏輯就是判斷目前object和你指向的object是否一緻 是以底層邏輯上來說 就是對位址的判斷
然後
對于值類型來說 值類型互相判斷
值相等 必然為true
對于引用類型來說
先下定義:隻判斷堆記憶體位址是否一緻
在C#中
string a = “111”;
string b = “111”;
return true;
這是由于我們在調用string的判斷時 string對C#的 == 進行了重寫 是以你會發現你在寫代碼時 盡管兩個string的位址不一樣 但是得出的結果依然為true
是以我們繼承string 将string的 == 重寫 重寫之後的判斷:
string a = “111”;
string b = “111”;
return true;
這個時候你會發現 ab的傳回值 依然是true 這是什麼情況?難道恒等于true??定義錯誤了??
這是因為C#有 “池” 的概念 當我們去申請一個記憶體的時候 計算機會去這個 “池” 裡面尋找是不是有相同值的字元串 如果有 則讓目前的字元串指向該池中的字元串 是以這個時候 你去判斷a == b 不是因為他們的值相等 導緻的true 而是因為他們的位址是一緻的 是以傳回值才會是true
而我們怎麼樣才會傳回false呢?這樣寫的話:
string a = new string(“111”);
string b = new string(“111”);
return false;
這時判斷 a == b 就是false了