zh
题目 :创建一个User类 具有 name 和 password属性,重写它们的equals方法,比较俩对象的属性是相同
public class EqualsDemo {
public static void main(String[] args) {
User user1=new User(null,"123");
User user2=new User(null,"123");
System.out.println(user1.equals(user2));
}
}
class User{
private String name;
private String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean equals(Object object){
//先判断本对象与参数对象的位置是否相同,若相同,必为ture
if(this==object) return true;
//接着判断参数对象是否为空,必为false
if(object==null) return false;
//然后判断俩对象是不是同一类,若不是,必为false
if(this.getClass()!=object.getClass()) return false;
//如果进行到这步就说明俩对象是同一类,就需要对object进行强转变为User形
User user= (User) object;
//接着比较俩对象的属性是否相同
//this.name为空
if (this.name == null){
if (user.name != null){
return false;
}
//this.name不为空
}else if(!this.name.equals(user.name)){
return false;
}
//this.password为空
if (this.password == null){
if (user.password != null){
return false;
}
//this.password不为空
}else if(!this.password.equals(user.password)){
return false;
}
return true;
}
}
有小伙伴可能会有疑问 能不能将俩对象属性的比较 改为
if (this.password != null && user.password == null || this.password == null && user.password != null)
return false;
if (!this.password.equals(user.password)) return false;
这种情况是不行的,因为当this.passwor==null 时,它不能调用equals方法,会出现空指针异常。
还有一种更简单的方法重写equals,你只要在idea中右键单击选择Generate就可以选择equals方法了。(字体小,你需要仔细看)