如果有两个数字要判断是否相等,可以使用"=="完成,如果字符串要判断是否相同可以使用equals()方法,但是如果有一个自定义类,要判断它的两个对象是否相等,那么必须要实现类对象中所有属性内容的比较
String类中的equals()方法也属于对象比较操作,它具备null的验证
对象比较实现:
package oop; /** * 对象比较实现 */ //定义一个图书类 class Book1{ private String title;//书名 private double price;//价格 //定义构造方法 //无参 public Book1() { } //有参 public Book1(String title, double price) { this.title = title; this.price = price; } //定义get和set方法 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } //定义一个对象比较的方法 /** * 进行本类对象的比较操作,在比较过程中首先判断传入的对象是否为null,然后判断地址是的相同 * 如果不相同则进行对象内容的判断,由于compare()方法接收本类引用,所以可以中窘境访问私有属性 * @param book1 要进行判断的依据 * @return 内存地址相同或者属性完全相同则返回true,否则返回false */ public boolean compare(Book1 book1){ if(book1==null){ //判断传入数据是否为null return false;//没有必要进行具体的判断 } if(this==book1){//比较内存地址是否相同 return true;//避免进行具体细节的比较,节约时间 } if(this.title.equals(book1.title)&&this.price==book1.price){//判断属性是否相同 return true; }else{ return false; } } } //定义测试类 public class TestDemo03 { public static void main(String[] args) { //实例化对象 Book1 a=new Book1("java",90); Book1 b=new Book1("java",90); //对象比较 if(a.compare(b)){ System.out.println("是同一个对象"); }else{ System.out.println("是不同的对象"); } } } //程序运行结果为:是同一个对象
对象比较的操作有以下四个特点:
-
本类接收自己的引用,再与本类当前对象(this)进行比较
-
为了避免空指针异常的产生,应该增加一个null的判断
-
为了防止浪费性能的情况出现(要判断的属性会多),可以增加地址数值的判断,因为相同的对象地址相同
-
进行属性的依次比较,如果属性全部相同,则返回true,否则返回false