其实不管用不用的到,每创建一个实例类,因为默认调用继承自Object类的equals方法,只能比较对象的地址是否相同,而不能比较对象的值。所以我们都应该重写equals方法,这是一种代码规范。
1.创建实例类
这里我创建了一个user类,属性有name和age;
public class user{
private String name;
private int age;
public user(){//声明无参构造
}
public user(String name,int age){//声明有参构造
this.name=name;
this.age=age;
}
}
2.重写equals方法
//注意:重写的equals需要放在相应的实例类中
public boolean equals(Object o){//重写equals方法
if(o==null || !(o instanceof User))
//instanceof用于判断对象类型
return false;
if(o == this) //再判断传入的对象的值是不是与本身相等
return true;
User u = (User)o;
return u.name==this.name && u.age=this.age;
//最后判断姓名、年龄值(属性值)是否相等。
}
3.测试
public static void main(String[] args){
User u1 = new User("wangwu",18);
User u2 = new User("zhangsan",28);
User u3 = new User("wangwu",18);
System.out.println(u1.equals(u2));
//u1和u2值不同,返回false
System.out.println(u1.equals(u3));
//u1和u3的对象不同,但值相同,返回true
}
4.实验结果
5.完整源码:
public class App {
public static void main(String[] args){
User u1 = new User("wangwu",18);
User u2 = new User("zhangsan",28);
User u3 = new User("wangwu",18);
System.out.println(u1.equals(u2));
System.out.println(u1.equals(u3));
}
public static class User{
private String name;
private int age;
public User(){//声明无参构造
}
public User(String name,int age){//声明有参构造
this.name=name;
this.age=age;
}
public boolean equals(Object o){//重写equals方法
if(o == null || !(o instanceof User))
return false;
if(o == this)
return true;
User u = (User)o;
return (u.name == this.name) && (u.age == this.age);
}
}
}