1. 程式人生 > >Java基礎知識回顧之物件比較

Java基礎知識回顧之物件比較

說明

如果是需要判斷兩個數字是否相等,可以使用" == ",如果是判斷字串是否相等,是使用 “equals()”。如果是現在判斷一個自定義的類,要想判斷兩個物件是否相等,那麼應該是需要比較在類物件之中所有屬性內容的比較,只有所有屬性內容相等,才算相等。

直接比較屬性

如果我們使用最原始的方式來對物件進行比較,那麼就需要按照下面的程式碼所寫,對每一個屬性進行判斷

class Book{
	private String title;
	private double price;
	
	public void setTitle(String title) {this.title =
title;} public String getTitle() {return this.title;} public double getPrice() {return price;} public void setPrice(double price) {this.price = price;} Book(){} Book(String title, double price){ this.title = title; this.price= price; } } public class TestDemo { public static void main
(String[] args) { Book book1 = new Book("Java", 90); Book book2 = new Book("Java", 90); if( book1.getPrice() == book2.getPrice() && book1.getTitle().equals(book2.getTitle()) ) { System.out.println("是同一個物件"); } else { System.out.println("不是同一個物件"); } } }

在類中增加一個用於比較的方法

但是我們可以發現,上面的程式碼比較並不是特別理想化,我們做下面的改動,會在 Book

類中增加一個方法,用來比較

class Book{
	private String title;
	private double price;
	
	public void setTitle(String title) {this.title = title;}
	public String getTitle() {return this.title;}
	public double getPrice() {return price;}
	public void setPrice(double price) {this.price = price;}
	
	Book(){}
	
	Book(String title, double price){
		this.title = title;
		this.price= price;
	}
	
	// 在類中定義個比較的方法,然後接受一個 Book 物件
	// 此時,在此方法中會存在有兩個物件,一個是當前物件 this,一個是傳入的物件book
	public boolean compare(Book book) {
		
		if(this.price == book.getPrice() && this.getTitle().equals(book.getTitle())){
			return true;
		}else {
			return false;
		}
	}
}

public class TestDemo {

	public static void main(String[] args) {
		Book book1 = new Book("Java", 90);
		Book book2 = new Book("Java", 90);
		
		if(book1.compare(book2) ) {
			System.out.println("是同一個物件");
		} else {
			System.out.println("不是同一個物件");
		}
	}
}

最優化的比較程式碼方式

class Book{
	private String title;
	private double price;
	
	public void setTitle(String title) {this.title = title;}
	public String getTitle() {return this.title;}
	public double getPrice() {return price;}
	public void setPrice(double price) {this.price = price;}
	
	Book(){}
	
	Book(String title, double price){
		this.title = title;
		this.price= price;
	}
	
	// 在類中定義個比較的方法,然後接受一個 Book 物件
	// 此時,在此方法中會存在有兩個物件,一個是當前物件 this,一個是傳入的物件book
	public boolean compare(Book book) {
		
		if( book == null ) return false; // 如果傳入的值為空,就直接返回 
		if(this == book) return true;	// 防止出現傳入自己比自己的情況
		
		if(this.price == book.getPrice() && this.getTitle().equals(book.getTitle())){
			return true;
		}else {
			return false;
		}
	}
}

public class TestDemo {

	public static void main(String[] args) {
		Book book1 = new Book("Java", 90);
		Book book2 = new Book("Java", 90);
		
		if(book1.compare(book2) ) {
			System.out.println("是同一個物件");
		} else {
			System.out.println("不是同一個物件");
		}
	}
}