Java 重写toString()和equals()方法:
一.创建学生类和学生测试类
package test;
public class Student {
private String id;
private String name;
public Student() {
}
public Student(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package test;
public class StuTest {
public static void main(String[] args) {
Student st1=new Student("1","sg");
Student st2=new Student("1","sg");
System.out.println(st1);
System.out.println(st2);
System.out.println(st1==st2);
System.out.println(st1.equals(st2));
}
}
结果:
打印两个对象打印的是两个对象地址值,地址值也是不同的,所以拿"=="是比较的地址值肯定是false,但是去调equals()方法,是直接调用的超类Object中的equals()方法(public boolean equals (Object ibj){return (this =`= obj)}是比较的是两对象的地址,所以我们需要重写toString()和equals()方法
二.重写toString()方法
这是Object类中的toString()方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
返回的是地址值(哈希码),所以需要重写toString()方法
这是重写之后的toString()方法
@Override
public String toString(){
return (id+" "+name);
}
能得到我们想要的对象中的数据显示
三.重写equals()方法
这是Object类中的equals()方法
public boolean equals(Object obj) {
return (this == obj);
}
比较的是对象的地址值,所以我们重写equals()方法
@Override
public boolean equals(Object obj){
if (obj==null||!(obj instanceof Student))return false;//判断传入的对象是否为空和是否是该类
if (this==obj)return true;//判断这两个对象的地址是否相同
Student s=(Student)obj;//强制向下转型,为接下来对象中的数据比较
if (this.id.equals(s.id)&&this.name.equals(s.name)){
return true;
}
return false;//如果都不成立则返回false
}
在调用equals()方法时候,一般将已知的字符串放在 . 的前面,未知的放入花括号中可以进行判断是否为空等。(均在Student类中进行重写)
重写完毕之后的结果: