java中的equals方法
java中Object类的equals方法其实也是比较的地址,但是一旦重写之后,equals就比较的值。所以重写之后的方法,为什么就是比较值了呢?下面是重写后的方法,可以讲解一下代码意思吗
最新回答(1条回答)
很多时候需要根据这个类的作用进行重写equals方法,比如在一个学生信息类的时候,通常的变量是这几个,ID、name、专业,成绩,怎么确定是同一个人呢,这就需要使用到equals方法,使用字符串的对比方法。当然这个对比已经在String类中实现了,只要自己使用就可以了。
现在就重写equals方法,利用Uesr类创造两个对象,一个是灰灰,一个是大灰灰,但是其ID是一样的,具体代码如下
public class TestEquals {
public static void main(String[]args) {
Object obj;
String str;
Uesr u= new Uesr(1000,"灰灰","201704500238");
Uesr u1=new Uesr(1000,"大灰灰","201704500238");
System.out.println(u==u1); //false
System.out.println(u.equals(u1));// true
}
}
class Uesr{
int id;
String name;
String pwd;
public Uesr(int id,String name,String pwd) {
this.id=id;
this.name=name;
this.pwd=pwd;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Uesr other = (Uesr) obj;
if (id != other.id)
return false;
return true;
}
}
结果已经显而易见了
System.out.println(u==u1); //false
System.out.println(u.equals(u1));// true
使用==符号直接对比,这个就是对比是不是一个对象,u和u1肯定不是一个对象,
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Uesr other = (Uesr) obj;
if (id != other.id)
return false;
return true;
}
重写equals方法之后,这就是对比u和U1中的ID是不是相同了,显而易见肯定是true,灰灰,大灰灰都是201704500238。但是如果对比的是name就不同了。
