A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵凯 中级黑马   /  2013-9-5 15:03  /  1953 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

覆盖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;
        }

3 个回复

倒序浏览
本帖最后由 许庭洲 于 2013-9-5 15:20 编辑

1. Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等;
2 .Object的Equals的默认实现比较的是两个对象的引用等同性;
3. Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性;
4. 在C#中,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性;
5.  每当使用引用类型的逻辑等同性的时候,就应该重写Equals方法。
回复 使用道具 举报
许庭洲 发表于 2013-9-5 15:19
1. Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等;
2 .Object的Equals的默认实现比较 ...

没看太明白
回复 使用道具 举报
1. Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等;
2 .Object的Equals的默认实现比较的是两个对象的引用等同性;
3. Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性;
4. 在C#中,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性;
5.  每当使用引用类型的逻辑等同性的时候,就应该重写Equals方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马