• 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)就可以了。

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



  • 相关阅读:
    联网获取图片, 保存用户的图像 bitmap
    使用 线程池,控制线程 , 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待:
    ImageView属性 android:scaleType="fitXY" ,拉伸图片非常好用
    Activity之间传值,Intent
    退出应用程序 按两次退出键
    修炼-------------Android TabHost,TabWidget选项卡总结
    对TabHost、TabWidget的理解分析
    poj 1847 Tram
    hdu 1874 畅通工程续
    hdu 2544 最短路
  • 原文地址:https://www.cnblogs.com/woaixingxing/p/7482215.html
Copyright © 2020-2023  润新知