/*题目简述:
* 自定义一个Person类,有name和age属性,并建一个两个参数的构造函数,
* 在主函数main中,定义两个Person对象p1和p2,如下,调用equals比较这个两个对象是否相等。
Person p1 = new Person(“xiaowang”,12);
Person p2 = new Person(“xiaowang”,12);
p1.equals(p2);
*/
/*分析
如果不重写equals()方法的话,返回的是false,因为Objec类中equals()方法用的是“==”比较,"=="比较的是地址值
因此,Object里的equals()方法比较的是对象的地址值无实际意义
(String类型之所以能进行内容的比较是因为String类中重写了equals()方法)
故,在此处要想比较对象的内容是否相同,也得重写equals()方法
*/
未重写之前的equals()方法:
public boolean equals(Object obj) {
return (this == obj);
}
Eg之重写Equals()方法:
public class Test5 {
public static void main(String[] args) {
Person p1 = new Person("xiaowang",12);
Person p2 = new Person("xiaowang",12);
System.out.println(p1.equals(p2));
}
}
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
Person() {
}
Person(String name,int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
//多态的弊端是无法使用子类特有的属性和行为,所以得向下转型
Person p1 = (Person) obj;//将Object向下转型为Person
return this.name.equals(p1 .name) && this.age == p1 .age;
}
}