黑马程序员技术交流社区

标题: 覆盖equals方法,健壮性判断 [打印本页]

作者: 赵凯    时间: 2013-9-5 15:03
标题: 覆盖equals方法,健壮性判断
覆盖equals方法中,传进来一个person对象,为什么还要比较是不是person类型的?如果是,为什么还要进行强转成person类型的?
public boolean equals(Object obj){
                if( this == obj)
                        return true;
                if( obj instanceof Person){
                        Person p = (Person)obj;
                        return this.name.equals(p.name) && this.age == p.age;
                }
                return false;
        }


作者: 许庭洲    时间: 2013-9-5 15:19
本帖最后由 许庭洲 于 2013-9-5 15:20 编辑

1. Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等;
2 .Object的Equals的默认实现比较的是两个对象的引用等同性;
3. Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性;
4. 在C#中,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性;
5.  每当使用引用类型的逻辑等同性的时候,就应该重写Equals方法。

作者: 赵凯    时间: 2013-9-5 15:54
许庭洲 发表于 2013-9-5 15:19
1. Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等;
2 .Object的Equals的默认实现比较 ...

没看太明白

作者: 冬爱♂小七    时间: 2013-9-5 18:11
1. Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等;
2 .Object的Equals的默认实现比较的是两个对象的引用等同性;
3. Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性;
4. 在C#中,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性;
5.  每当使用引用类型的逻辑等同性的时候,就应该重写Equals方法。




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