在Java中,可以使用equals()方法來比較對象,該方法根據對象的屬性來判斷兩個對像是否相等。在Java中比較物件時,重寫類別中的equals()方法非常重要,以確保根據所需的屬性進行比較。
這個Java程式透過重寫equals()方法來比較兩個類型為Person的對象,根據它們的name和age屬性進行比較。首先使用equals()方法檢查物件是否屬於同一類,然後比較name和age屬性。如果兩個屬性都匹配,方法回傳true,表示物件相等。如果任何一個屬性不同,方法傳回false,表示物件不相等。
使用 equals() 方法
不覆蓋
使用覆蓋
使用 hashCode() 和 equals() 方法
在一個類別中重寫equals()方法允許根據物件的屬性進行自訂比較。
我們先定義一個Person類,其中包含兩個私有實例變數:name和age。
我們為Person類別定義了一個建構函數,它接受一個名稱和年齡,並用這些值初始化實例變數。
我們在Person類別中重寫了equals()方法,以便根據姓名和年齡比較兩個Person物件。 equals()方法接受一個Object參數,我們先檢查該參數是否不為空且是Person類別的一個實例。然後我們將該物件轉換為Person對象,並將其姓名和年齡屬性與目前物件的姓名和年齡屬性進行比較。
在main()方法中,我們建立了兩個不同姓名和年齡值的Person物件。
我們在第一個Person物件上呼叫equals()方法,將第二個Person物件當作參數傳入。 equals()方法傳回一個布林值,指示這兩個物件是否相等。
最後,我們使用System.out.println()將比較的結果印到控制台
public class ObjectComparator { public static void main(String[] args) { // Create two objects to compare Person person1 = new Person("Alice", 25); Person person2 = new Person("Bob", 30); // Compare the two objects boolean areEqual = person1.equals(person2); System.out.println("Are the two objects equal? " + areEqual); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (!(obj instanceof Person)) return false; Person otherPerson = (Person) obj; return this.name.equals(otherPerson.name) && this.age == otherPerson.age; } }
在這個例子中,我們建立了兩個具有不同名稱和年齡的Person對象,然後呼叫第一個物件的equals方法來比較它與第二個物件。 equals方法在Person類別中定義,並檢查這兩個物件是否具有相同的名稱和年齡屬性。最後,我們將比較的結果印到控制台上。
Are the two objects equal? false
沒有覆寫equals()方法,物件的比較是基於它們的參考而不是屬性。
我們先定義一個Person類,其中包含兩個私有實例變數:name和age。
我們為Person類別定義了一個建構函數,它接受一個名稱和年齡,並用這些值初始化實例變數。
在main()方法中,我們建立了兩個具有相同名稱和年齡值的Person物件。
我們在第一個Person物件上呼叫equals()方法,並將第二個Person物件當作參數傳入。由於我們沒有在Person類別中重寫equals()方法,因此使用了從Object類別繼承的equals()方法的預設實作。此實作檢查兩個物件是否是同一個物件(即具有相同的記憶體位址),如果是,則傳回true。由於person1和person2物件有不同的記憶體位址,equals()方法傳回false。
最後,我們使用System.out.println()將比較結果列印到控制台。
public class ObjectComparator { public static void main(String[] args) { // Create two objects to compare Person person1 = new Person("Alice", 25); Person person2 = new Person("Alice", 25); // Compare the two objects boolean areEqual = person1.equals(person2); System.out.println("Are the two objects equal? " + areEqual); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } }
在這個例子中,我們建立了兩個具有相同名稱和年齡的Person對象,然後呼叫equals方法來比較第一個物件和第二個物件。由於我們沒有在Person類別中重寫equals方法,所以使用了從Object類別繼承的預設實作。這個實作檢查這兩個物件是否是同一個物件(即具有相同的記憶體位址),如果是,則傳回true。由於person1和person2物件有不同的記憶體位址,equals方法傳回false。最後,我們將比較的結果列印到控制台。
Are the two objects equal? false
沒有覆寫equals()方法,物件的比較是基於它們的參考而不是屬性。
我們建立了兩個Person類別的對象,person1和person2,它們的名稱和年齡相同。
我們接著在person1上呼叫hashCode()和equals()方法。
在Person類別中,我們重寫了hashCode()方法,使用Objects.hash()方法基於物件的name和age屬性產生哈希碼。
然后我们重写equals()方法,根据它们的姓名和年龄属性来比较两个Person对象。该方法首先检查对象是否属于同一类,如果是,则使用Objects.equals()方法检查它们的姓名和年龄属性是否相等。
在main()方法中,我们使用&&运算符通过hashCode()方法检查person1和person2的哈希码是否相同,并且通过equals()方法返回true。
最后,我们打印出一个消息,指示这些对象是否相等。
public class ObjectComparator { public static void main(String[] args) { // Create two objects to compare Person person1 = new Person("Alice", 25); Person person2 = new Person("Alice", 25); // Compare the two objects using hashCode and equals methods boolean areEqual = person1.hashCode() == person2.hashCode() && person1.equals(person2); System.out.println("Are the two objects equal? " + areEqual); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public int hashCode() { return Objects.hash(name, age); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof Person)) return false; Person other = (Person) obj; return Objects.equals(name, other.name) && age == other.age; } }
在这个例子中,我们创建了两个具有相同姓名和年龄的Person对象,然后调用第一个对象的hashCode()和equals()方法来与第二个对象进行比较。
在Person类中,我们重写了hashCode()和equals()方法,以便根据它们的name和age属性来比较对象。hashCode()方法返回name和age属性的组合的哈希码,equals()方法检查对象是否属于同一类,并且具有相同的name和age属性。
最后,我们使用&&运算符来检查两个对象的哈希码是否相同,并且equals()方法是否返回true。如果两个条件都为true,我们打印出对象相等的信息。否则,我们打印出对象不相等的信息。
The two person objects are equal
这个Java程序使用equals()方法来比较两个Person对象的属性,该方法已在Person类中被重写。
该程序展示了定制对象比较的重要性,并突出了Java在实现自定义比较逻辑方面提供的灵活性。
以上是Java程式比較兩個對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!