天天看點

關于==和equal的差別(C#/Java)

首先

值不相等 == 和 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了