C 中Equals和 等於號 的比較

2021-09-26 21:31:41 字數 2236 閱讀 2894

相信很多人都搞不清equals和 = =的區別,只是零星的懂一點,現在就讓我帶大家來進行一些剖析

對於值型別來說 兩者比較的都是」內容」是否相同,即 值 是否一樣,很顯然此時兩者是劃等號的。

例:

int i = 9;

int j = 9;

console.writeline(「equals和= =(等於號)的比較」);

結論:對於值型別來說 兩者是相同的 都是比較的變數的值

對於引用型別來說,等號(==)比較的是兩個變數的」引用」 是否一樣,即是引用的」位址」是否相同。

而對於equals來說仍然比較的是變數的 」內容」 是否一樣

1、 字串的比較(string)

//對於string 字串的測試比較

string s1 = "abc";

string s2 = "abc";

console.writeline(「equals和= =(等於號)的比較」);

console.writeline("s1==s2 " + (s1 == s2));

console.writeline("s1.equals(s2) " + s1.equals(s2));

結果:

大家可能會問 上面說的 = =號是比較兩個引用型別的變數的引用是否一致,但是上面的s1 和s2是兩個不同的變數,為何比較的輸出是true呢?

答案: 由於string是微軟封裝的乙個字串類,在內部他已經對 = = 操作符進行了重寫。重寫後他比較的則是兩個變數的內容是否相同,下面我會給大家證明的:

使用 reflector 反編譯工具 檢視這個方法的原始碼 如下:

重寫後的 = = 操作符內部呼叫的即是 equals 方法,所以輸出的是true

2、 自定義的其他引用型別——一 person類為例

person p1 = new person("aa", 12);

person p2 = new person("aa", 12);

console.writeline("equals和= =(等於號)的比較");

對於 p1==p2 比較的結果是false,這點是毫無疑問的,因為他倆是兩個不同的變數,所以引用的位址也是不同的。但是對於p1.equals(p2) 返回false,可能有人會產生疑問,p1 和p2的內容是相同的啊,為什麼他倆的比較結果卻是為false呢?。原因就在於在equals是object中的乙個虛方法,而person類中沒有對她進行重寫,因此此時呼叫的仍是父類中的equals方法。但是父類是無法知道你都有哪些成員欄位的,因此返回的是false。要想讓他能夠比較兩個變數的內容是否相同,那就應該重寫equals方法

**如下:

public override bool equals(object obj)

else

}

總結:equals比較的永遠是變數的內容是否相同,而= =比較的則是引用位址是否相同(前提:此種型別內部沒有對equals 或= = 進行重寫操作,否則輸出可能會有不同)

string 型別是個特例,因為他的內部對這兩個都進行了重寫。

標籤: .net.c#, string, equals, ==

C 中Equals和 等於號 的比較

c 中equals和 等於號 的比較 相信很多人都搞不清equals和 的區別,只是零星的懂一點,現在就讓我帶大家來進行一些剖析 一 值型別的比較 對於值型別來說 兩者比較的都是 內容 是否相同,即值 是否一樣,很顯然此時兩者是劃等號的。例 int i 9 int j 9 console.write...

神奇的等於號

在domino圈,有乙個眾所周知的秘密 越是新人,膽子越大。受了系統的打擊報復,還要以更有力的核打擊報復回去。是你讓我沒有信心掌握你的執行規則,那就玉石俱焚!於是,刪檔案的 屢屢發生。雖然冤冤相報何時了,但就在這樣的過程中有了一些神奇的發現。比如九通就愛刪檔案,無論好壞,刪了再說 萬一刪好了呢?總比...

python中等於號 python中的 號

from 傳遞實參和定義形參 所謂實參就是呼叫函式時傳入的引數,形參則是定義函式是定義的引數 的時候,你還可以使用兩個特殊的語法 呼叫函式時使用 test args 的作用其實就是把序列 args 中的每個元素,當作位置引數傳進去。比如上面這個 如果 args 等於 1,2,3 那麼這個 就等價於 ...