Java基礎知識回顧之物件比較
阿新 • • 發佈:2018-12-08
說明
如果是需要判斷兩個數字是否相等,可以使用" == ",如果是判斷字串是否相等,是使用 “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("不是同一個物件");
}
}
}