1. 程式人生 > >[Java] 類 Object 的 equals 方法

[Java] 類 Object 的 equals 方法

Object是所有Java類的基類,Object類含有一個方法equals,預設實現是:

public boolean equals(Object obj) {
    return (this == obj);
}

預設比較兩個引用變數是否指向同一個物件。
使用者自定義類應該重寫這個方法,以比較兩個不同物件的內容是否相同。

很多Java 類都重寫了這個equals方法,例如java.lang.Stringjava.util.Date,以比較兩個物件是否內容相同。

比較操作符 == 強於 equals,因為==用於比較兩個原始資料型別是否有相同的值,或者兩個變數是否指向相同的物件。而假若equals

方法被重寫,equals就是用於比較兩個物件是否有相同的內容。

下面的例子,如果Circle為Case 1, 輸出false,如果為Case 2, 輸出true, Case 1 中的equals 非重寫,加@Override會出錯,main中的equals呼叫Object中的equals,會繞過Case 1中的equals方法, 只有Case 2 的equals才是正確的過載。簡而言之,如果重寫equals方法,equals的引數型別必須是基類Object

public class Test {
    public static void main(String[] args) {
        Object circle1 =
new Circle(); Object circle2 = new Circle(); boolean x = circle1.equals(circle2); // boolean x = ((Circle)circle1).equals((Circle)circle2); //for Case 1 System.out.println(x); } } // Case 1: class Circle { double radius; //@Override public boolean equals(
Circle circle) { return this.radius == circle.radius; } } // Case 2: class Circle { double radius; @Override public boolean equals(Object circle) { return this.radius == ((Circle)circle).radius; } }

Introduction to Java Programming 10.th edition 11.10