您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關java中判斷對象是否相等的方法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1、equals的作用及與==的區別
equals被用來判斷兩個對象是否相等。
equals通常用來比較兩個對象的內容是否相等,==用來比較兩個對象的地址是否相等。
equals方法默認等同于“==”。
Object類中的equals方法定義為判斷兩個對象的地址是否相等(可以理解成是否是同一個對象),地址相等則認為是對象相等。這也就意味著,我們新建的所有類如果沒有復寫equals方法,那么判斷兩個對象是否相等時就等同于“==”,也就是兩個對象的地址是否相等。
Object類中equals的方法實現如下:
public boolean equals(Object obj) { return (this == obj); }
但在我們的實際開發中,通常會認為兩個對象的內容相等時,則兩個對象相等,equals返回true。對象內容不同,則返回false。
所以可以總結為兩種情況
1、類未復寫equals方法,則使用equals方法比較兩個對象時,相當于==比較,即兩個對象的地址是否相等。地址相等,返回true,地址不相等,返回false。
2、類復寫equals方法,比較兩個對象時,則走復寫之后的判斷方式。通常,我們會將equals復寫成:當兩個對象內容相同時,則equals返回true,內容不同時,返回false。
舉個例子:
public class EqualTest { public static void main(String[] args) { Person p1 = new Person(10,"張三"); Person p2 = new Person(10,"張三"); System.out.println(p1.equals(p2)); } } class Person{ int age; String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Person未復寫equals方法,則默認使用了Object中的equals,即為兩個對象(p1和p2)的內存地址判斷,p1和p2很明顯內存地址不同,所以輸出結果很明顯為false。
如果我們復寫equals方法呢?我們認為名字和年齡一樣的就是同一個人,那么p1和p2都表示10歲的張三,這兩個對象應該是相等的。復寫的equals方法如下:
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
同樣的,執行上述用例,得到的結果是true。
BTW:如果equals方法返回true,那么==是否也是true?
不一定是true。equals返回true有兩種可能,一種是兩個對象地址相同,一種是兩個對象內容相同。當內容相同時,地址可能不同,所以==比較的結果可能為false。
我們把main方法加上對==的判斷,如下:
public static void main(String[] args) { Person p1 = new Person(10,"張三"); Person p2 = new Person(10,"張三"); System.out.println(p1.equals(p2)); System.out.println(p1 == p2); }
輸出結果很明顯 p1==p2的結果是false。
以上就是java中判斷對象是否相等的方法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。