Java語言是一門基於對象的編程語言。在Java中對象之間的比較是非常重要的操作。為了進行對象之間的比較,Java提供了equals()方法。本文將介紹Java中equals()方法的使用。
一、equals方法概述
在Java中,所有的對象都繼承了Object類,而Object類中定義了一個equals()方法。equals()方法的作用是判斷兩個對象是否相等,相等返回true,不相等返回false。
public boolean equals(Object obj) { return (this == obj); }
可以看出,Object類中的equals方法是直接判斷兩個對象是否為同一個對象。因此,若我們自己定義的類覆蓋了equals()方法,就可以改變對象之間相等的定義規則。
二、equals方法覆蓋要點
若想要自定義equals方法,那麼需要滿足幾個要點:
1、自反性:對於任何非空引用x,x.equals(x)應該返回true。
2、對稱性:對於任何非空引用x和y,如果x.equals(y)返回true,那麼y.equals(x)也應該返回true。
3、傳遞性:對於任何非空引用x、y和z,如果x.equals(y)返回true,並且y.equals(z)也返回true,那麼x.equals(z)也應該返回true。
4、一致性:對於任何非空引用x和y,如果用於比較的對象沒有被修改,那麼反覆調用x.equals(y)應該始終返回true或者始終返回false。
5、任何非空引用x都不能與null相等。
三、equals方法的實現
假設我們有一個Person類,其中包含屬性name、age,並且我們需要根據兩個Person對象的name和age是否相同來比較兩個Person對象是否相等。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // equals方法覆蓋 public boolean equals(Object obj) { // 判斷是否為同一個對象 if (this == obj) { return true; } // 判斷是否為null和類型是否一致 if (obj == null || getClass() != obj.getClass()) { return false; } // 強制類型轉換 Person person = (Person) obj; // 判斷屬性值是否相等 if (age != person.age) { return false; } return name.equals(person.name); } }
在上述代碼中,equals方法覆蓋了Object類中默認的equals方法。首先,判斷兩個是否為同一個對象。如果是同一個對象直接返回true。接着判斷對象是否為null以及類型是否一致。強制類型轉換之後,再判斷屬性值是否相等。最後返回比較結果。
四、equals方法的調用
在Java中,通常使用“==”比較兩個對象是否相等。但是“==”判斷的是兩個對象的地址是否相等,而不是對象的內容是否相等。
使用equals()方法比較兩個對象是否相等如下:
Person p1 = new Person("Tom", 20); Person p2 = new Person("Tom", 20); // 調用equals()方法比較 if (p1.equals(p2)) { System.out.println("p1 equals p2"); } else { System.out.println("p1 not equals p2"); }
上述代碼中,創建了兩個Person對象p1和p2,並且p1和p2的屬性值相同,但是p1和p2的地址不同。調用p1的equals方法比較p1和p2是否相等,因為p1和p2的屬性值相同,所以返回true。
五、總結
equals()方法是Java語言中重要的方法之一,也是Java中常用的方法之一。覆蓋equals方法需要遵循一定的規則,才能保證對象之間的比較正確。在實際編程中,需要根據具體需求覆蓋equals方法,比如在比較字符串、日期時間或者其他自定義對象時,都需要重新定義equals方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/155135.html