黑马程序员技术交流社区

标题: equals 重写后 迷糊了 [打印本页]

作者: 孙铭泽    时间: 2012-8-24 21:12
标题: equals 重写后 迷糊了
class Person{
        private String name;
                private int age;
                public boolean equals(Object obj){
                if(!(obj instanceof Person)){
                        return false;
                }
                Person p = (Person)obj;
                System.out.println(this.name+"..."+p.name);    //这个this和p不是同一个吗?               
                                return this.name.equals(p.name) && this.age==p.age;
        }
}

一个集合中存Person对象的时候,判断他们名字和年龄是否相同的时候都会调用这个equals方法,它们中的this和p不都是指调用这个equals方法的Person对象吗?
为什么会写  System.out.println(this.name+"..."+p.name);         
                    return this.name.equals(p.name) && this.age==p.age;
this和p不是指的同一个对象吗?
作者: 唐见    时间: 2012-8-24 21:31
this是指此方法的调用者,p是指传递进来需要进行比较的对象。程序中Person p = (Person)obj;语句就是将要比较的对象强制转换成Person实例对象。

作者: 唐杨老师    时间: 2012-8-24 23:49
[Fly]楼上正解[/Fly]
作者: 商秀川    时间: 2012-8-25 01:16
当调用方法时,必须有一个实体对象调用equals()方法,并导入一个对象。 比如:p1.equals(p2);
this就是指p1调用者,p就是指传递进来需要进行比较的对象p2。
作者: 王金科    时间: 2012-8-25 02:16
this指调用者,而p是传进来的.
正如楼上那么兄弟所举例的那样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2