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)就可以了。
学习记录,如果错误请指正谢谢!