c 中「 」和Equals的區別

2021-08-18 17:37:11 字數 1606 閱讀 2761

一、值型別的比較

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

int i = 9

;

int j = 9

; console.writeline(

"i==j

"+(i==j)); //true

console.writeline(

"i.equals(j)

"+(i.equals(j))); //true

二、引用型別的比較

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

1、字串的比較

string s1 = "

abc"

;

string s2 = "

abc"

; console.writeline(

"s1==s2

"+(s1==s2));//

true

console.writeline("

s1.equals(s2)

"+(s1.equals(s2)));//

true

string是微軟封裝的乙個字串類,在內部他已經對 = = 操作符進行了重寫。重寫後他比較的則是兩個變數的內容是否相同,重寫後的 = = 操作符內部呼叫的即是 equals 方法,所以輸出的是true

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

person p1 = new person("

aa",18

); person p2 = new person("

aa",18

); console.writeline(

"p1==p2

"+(p1==p2));//

false

console.writeline("

p1.equals(p2)

"+p1.equals(p2));//

false

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

public

override

bool equals(object

obj)

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

C 中 和Equals的區別

和equals比較的內容都是一致的,都是比較內容 equals 比較首位址是否相等 比較值是否相等 利用反編譯工具,檢視string原始碼,可以看到如下 從 中可以看出,string對 也進行了重寫,所以,在string型別 和equals的功能是一致的,也是進行值的比較,所以如下 的 string...

C 中 和equals的區別

不想說太多,直接上 這兩個就沒什麼聯絡,有自己獨立的規則。聯絡在一起其實不利於記憶。下面是測試 console.writeline equals和 的區別 console.writeline 1 對於值型別的資料 console.writeline console.writeline 1.1 型別和...

C 中「 」和equals 的區別

如以下 12 3456 789intage 25 short newage 25 console.writeline age newage true console.writeline newage.equals age false console.readline age newage返回true...