一 概念簡介
1 ==和equals比較運算子:==要求兩個引用變數指向同一物件時才返回true,equals方法則允許使用者提供自定義的相等規則。
2 object類提供的equals方法判斷兩個物件相等的標準與==完全相同。因此開發者通常需要重寫equals方法。
二 ==號比較應用
1 **示例
public class equaltest
}
2 執行結果
65和65.0f是否相等?true
65和'a'是否相等?true
str1和str2是否相等?false
str1是否equals str2?true
3 結果分析
如果兩個變數是基本型別變數,且都是數值型別(不一定要求資料型別嚴格相同),則只要兩個變數的值相等,就將返回true。
如果是兩個引用型別變數,只有它們指向對一物件時,==判斷才會返回true。
三 字串的==號比較
1 **示例
public class stringcomparetest
}
2 執行結果
true
true
false
false
3 結果分析
jvm常量池保證相同的字串直接量只有乙個,不會產生多個副本,例子中s1,s4,s5所引用的字串可以在編譯期確定下來,因此它們都引用常量池中的同一字串物件。
使用new string()建立的字串是在執行時建立出來的,它儲存在執行時記憶體區,不會放入常量池中。
四 equals方法錯誤應用
1 **示例
class person
}// 定義乙個dog空類
class dog{}
public class overrideequalserror
}
2 執行結果
person物件是否equals dog物件?true
person物件是否equals string物件?true
3 結果分析
造成這種荒唐結果的原困是重寫person類的equais方法時沒有任何判斷,無條件返回true。
五 equals方法正確應用
1 **示例
class person
public person(string name , string idstr)
// 此處省略name和idstr的setter和getter方法。
// name的setter和getter方法
public void setname(string name)
public string getname()
// idstr的setter和getter方法
public void setidstr(string idstr)
public string getidstr()
// 重寫equals()方法,提供自定義的相等標準
public boolean equals(object obj)
}return false; }}
public class overrideequalsright
}
2 執行結果
p1和p2是否相等?true
p2和p3是否相等?false
3 結果分析
通常而言,正確重寫equals方法應滿足:自反性,對稱性,傳遞性,一致性,對於任何不是null的x,x.equals(null)一定返回faise。
java中 和 equals區別
是比較2個物件是否相等,物件包括基本型別的變數和引用型別變數 object類是所有類的父類 並且 equals是其中的方法 所以說 和equals 本質上都是一樣的 object 類中的equals 方法是 public boolean equals object o return this o 其...
Java中 和equals 的區別
1.用於比較引用資料型別和比較基本資料型別時具有不同的功能 比較基本資料型別,如果兩個值相同,則結果為true。eg package demo public class demo boolean compare int x int y else return false 這段 返回false。而在比...
Java中 和equals的區別
我們在寫程式的過程中,判斷會將兩個物件進行對比。比如拿字串來說吧!string hello hello string greeting hello string str new string hello system.out.println hello.equals greeting hello.e...