Java中的equals()方法用于比較兩個對象是否相等。在不重寫equals()方法的情況下,Java會自動調用Object類中的equals()方法進行比較,這意味著只有當兩個對象的引用指向同一個地址時,才會被認為是相等的。
public class Dog { private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } public static void main(String[] args) { Dog dog1 = new Dog("旺財", 3); Dog dog2 = new Dog("旺財", 3); System.out.println(dog1==dog2); System.out.println(dog1.equals(dog2)); } }
輸出結果為:
false false
可以看到,因為dog1和dog2的地址是不同的,所以使用==比較為false。而由于equals()方法沒有被重寫,因此Java自動調用Object的equals()方法進行比較,結果也為false。
如果我們想要比較兩個對象內容是否相等,就需要重寫equals()方法。一般來說,我們會比較兩個對象的屬性值是否相等。下面是一個重寫equals()方法的例子:
public class Dog { private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Dog)) { return false; } Dog other = (Dog) obj; return name.equals(other.name) && age == other.age; } public static void main(String[] args) { Dog dog1 = new Dog("旺財", 3); Dog dog2 = new Dog("旺財", 3); System.out.println(dog1==dog2); System.out.println(dog1.equals(dog2)); } }
輸出結果為:
false true
由于重寫了equals()方法,而兩個對象的屬性值都相同,因此調用equals()方法會返回true。