对象比较
如果说现在有两个数字要判断是否相等,可以使用“==”完成
如果是字符串要判断是否相等使用“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略
}