小弟刚学java,所以希望大侠们尽量讲详细些,第一:if(this==obj)这句我看来看去好像怎么就多余的呢?this不是表示当前对象,那obj表示的是传进来的对象,它们肯定会相等的嘛,不知道我理解错了没?第二:为什么要对传进来的对象进行向下转型?第三:对象向下转型前不是要向上转型吗?这里我看不出哪里体现了
class Person {
private String name; // 定义name属性
private int age; // 定义age属性 public Person(String name, int age) {
this.name = name;
this.age = age;
} public boolean equals(Object obj) {
if (this == obj) { // 地址相等
return true; // 肯定是同一个对象
}
if (!(obj instanceof Person)) { // 不是Person对象
return false;
}
Person per = (Person) obj; // 向下转型
if (per.name.equals(this.name) && per.age == this.age) {
return true; // 依次比较内容
} else {
return false;
}
} public String toString() {
return "姓名:" + this.name + ";年龄:" + this.age;
}
};public class ObjectDemo03 {
public static void main(String args[]) {
Person per1 = new Person("百度知道", 30); // 实例化Person
Person per2 = new Person("百度知道", 30); // 实例化Person
System.out.println(per1.equals(per2) ? "是同一个人!" : "不是同一个人!");
System.out.println(per1.equals("hello") ? "是同一个人!" : "不是同一个人!"); }
};

解决方案 »

  1.   

    1、per1.equals(per2) 时候,this是指per1,obj是per2,不是说this == obj是多余,这样是判断传进来的对象是不是本身。
    2、person类是继承Object的,肯定要转换成person来比较。
      

  2.   

    1.传进来的对象你怎么知道会和当前对象相等啊。public boolean equals(Object obj)这个方法只要给他的参数是一个OBJECT。他就会执行。比如你New了一个person对象。他调用person.equals(new Dog());跟另外一个对象做equals,返回的肯定是false。
     (this == obj) 这句的意思是用传进来的参数地址与自身做比较。用来处理person.equals(person)这种情况的。如果发生这种情况就可以直接返回true了。节省了后面不必要的运算。
    2、只有向下转型了成为person对象才能调用person中的方法啊。不转型的话这句是用不了的:(per.name.equals(this.name) && per.age == this.age)
    3、向上转型是在接收参数的时候。他是以Object对象接收的。而不是以Person接收的。