重写equals方法
在object类中equals方法只能用来比较地址是否一样
public boolean equals(Object obj) {
return (this == obj);
}
String可以使用equals比较地址是因为它重写了equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
当我们遇到自己想比较自己创建对象的属性时,就可以自己重写equals方法
例如:我们需要比较学生对象里面的值是否一样,肯定不能比较地址,那我们就可以重写equals方法来比较对象里面的两个属性name和学号
/**
* 学生类
* @author wgy
*
*/
public class Student extends Object{
String stuNo;
String stuName;
int age;
public void show() {
System.out.println("学号:"+stuNo+" 姓名:"+stuName+" 年龄:"+age);
}
@Override
public boolean equals(Object obj) {
if(obj==null) {
return false;
}
//强制类型转换
Student stu=(Student)obj; //NullPointerException
//比较学号和姓名
if(this.stuNo.equals(stu.stuNo)&&this.name.equals(stu.name)) {
return true;
}
return false;
}
}
public class Test {
public static void main(String[] args) {
Student zhangsan=new Student();
zhangsan.stuNo="bj1805";
zhangsan.stuName="xxx";
zhangsan.age=20;
Student lisi=new Student();
lisi.stuNo="bj1805";
lisi.stuName="xxx";
lisi.age=20;
boolean b=zhangsan.equals(lisi);
boolean b2=zhangsan==lisi;
System.out.println(b);
System.out.println(b2);
}
}