Java学习笔记之equals和Objects.equals

  equals 相信大家就知道,就是比较,我们平时也会在自己定义的类中加入自己重写的equals用来比较两个类是否相同,例如这样

public class Person {
    private String name; //姓名
    private int age; //年龄
    private String nickName; //昵称
    
    public Person(String name,int age,String nickName){
        this.name = name;
        this.age = age;
        this.nickName = nickName;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    
    //比较方法
    public boolean equals(Person p){
        return this.name.equals(p.name)&& this.age==p.age && this.nickName.equals(p.nickName);
    }
}
然后比较的时候就这样用
public class Main {

    public static void main(String[] args) {
        
        Person p1 = new Person("张三",14,"三狗子");
        Person p2 = new Person("张三",14,"三狗子");
        
        if(p1.equals(p2)){
            System.out.println("一样");
        }else{
            System.out.println("不一样");
        }
    }
}

但是我们大多数会用来比较两个字符串之间是否一样,例如上面Person类中的equals方法中的this.name.equals(name)这里的equals是调用java的api,但这里有个问题例如如果name是null怎么办?

这样的话我们就不得不修改下代码改成这样

//比较方法
    public boolean equals(Person p){
        return Objects.equals(this.name,p.name) && this.age == p.age && Objects.equals(this.nickName, p.nickName);
    }

这样就可以避免null的尴尬了。

解释:

为了防备name或者nickName可能为null的情况,需要使用Objects.equals方法,如果两个参数都为null,Objects.equals(a,b)调用将返回true;如果其中一个参数为null则返回false;否则,如果两个参数都不为null的话,则调用a.equals(b)就可以了。

 

学习记录,如果错误请指正谢谢!



 

转载于:https://www.cnblogs.com/woaixingxing/p/7482215.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值