1. 程式人生 > >Java基礎03-12_對象比較

Java基礎03-12_對象比較

如果 範例 [] out mark 傳遞 就是 完成 oid

對象比較

如果說現在有兩個數字要判斷是否相等,可以使用“==”完成

如果是字符串要判斷是否相等使用“equals()”

但是如果說現在有一個自定義的類,要想判斷它的兩個對象是否相等,那麽必須要實現類對象之中所有屬性內容的比較。

範例:基礎的比較方式

class Book {
    private String title;
    private double price;
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    public String getTitle() {
        return this.title;
    }
    public double getPrice() {
        return this.price;
    }
}
public class TestDemo {
    public static void main(String args[]) {
        Book b1 = new Book("Java開發", 79.8);// 實例化Book類對象
        Book b2 = new Book("Java開發", 79.8);// 實例化Book類對象
        if (b1.getTitle().equals(b2.getTitle())&& b1.getPrice() == b2.getPrice()) // 屬性比較
            System.out.println("是同一個對象!");
        } else {
            System.out.println("不是同一個對象!");
        }
    }
}

範例:對象比較實現

class Book {
    private String title ;
    private double price ;
    public Book(String title,double price) {
        this.title = title ;
        this.price = price ;
    }
    /**
     * 進行本類對象的比較操作,在比較過程中首先會判斷傳入的對象是否為null,而後判斷地址是否相同,
     * 如果都不相同則進行對象內容的判斷,由於compare()方法接收了本類引用,所以可以直接訪問私有屬性
     * @param book 要進行判斷的數據
     * @return 內存地址相同、或者屬性完全相同返回true,否則返回false
     */
    public boolean compare(Book book) {
        if (book == null) {     // 傳入數據為null
            return false ;      // 沒有必要進行具體的判斷
        }
        // 執行“b1.compare(b2)”代碼時會有兩個對象:當前對象this(調用方法對象,就是b1引用); 傳遞的對象book(引用傳遞,就是b2引用)
        if (this == book) {     // 內存地址相同
            return true ;       // 避免進行具體細節的比較,節約時間
        }
        if (this.title.equals(book.title)
            && this.price == book.price) {  // 屬性判斷
            return true ;
        } else {    return false ;  }
    }// setter、getter略
}

Java基礎03-12_對象比較