结果都一样是,当你调用object类(根类)的equals的方法时,返回的对象的值还是两地址,也就同样相当于在比较a==b.这时候我们要重写equals方法。楼主请看下面的实例学习:
class EqualsDemo {
public static void main(String[] args) {
/*
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // 使用==比较两个对象时, 是比较两个对象地址是否相同
System.out.println(s1.equals(s2)); // 调用equals方法比较两个对象是否相同
*/
Person p1 = new Person("张三", 19);
Person p2 = new Person("张三", 19);
System.out.println(p1); // 打印toString返回值
System.out.println(p2);
System.out.println(p1 == p2); // 比较是否地址相同
System.out.println(p1.equals(p2)); // 使用自定义的equals比较属性是否完全相同
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() { //重写toSting()方法,让输出时不输出地址而是字符串
return "Person(" + name + ", " + age + ")";
}
public boolean equals(Object obj) { // 重写equals()方法
Person other = (Person)obj; // 为了访问name和age, 先将Object类型的实参强转回Person类型
if (this.name != other.name) // 如果name不同, 返回false
return false;
if (this.age != other.age) // 如果age不同, 返回false
return false;
return true; // 上面如果没有返回, 就代表属性都相同, 返回true
}
} |