JAVA对象比较

如果有两个数字要判断是否相等,可以使用"=="完成,如果字符串要判断是否相同可以使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值