一、值型別的比較
對於值型別來說 兩者比較的都是」內容」是否相同,即值 是否一樣,很顯然此時兩者是劃等號的。
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方法
publicoverride
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...