黑马程序员技术交流社区

标题: 关于重写equals方法 [打印本页]

作者: 零下五度的水    时间: 2013-11-5 19:44
标题: 关于重写equals方法
class Student{
        public boolean equals(Object obj){
                if ( !(obj instanceof Student) )
                       throw new ClassCastException("类型不匹配");

该怎么看待他抛出异常而不是返回false,求质量回答
作者: ~﹏~    时间: 2013-11-5 20:24
  1. Teacher t=new Teacher();
  2. Student s=new Student();
  3. System.out.println(s.equals(t));//在调用s的equal方法时发现t不是s的实例,直接将异常抛到main函数的调用者,即控制台,程序中断了,怎么返回false呢?
复制代码

作者: ixiangfeng    时间: 2013-11-5 20:27
个人认为  如果返回false的话不妥 假如原意要比较的是两个学生的性别, 如果这里返回false会让人误认为是两个学生的性别不一样 但传入的可能是狗类、或者电脑类 这样的话下面再继续运行也就没意义了 因此抛出异常更合适
作者: 零下五度的水    时间: 2013-11-5 21:12
ixiangfeng 发表于 2013-11-5 20:27
个人认为  如果返回false的话不妥 假如原意要比较的是两个学生的性别, 如果这里返回false会让人误认为是两 ...

嗯,毕爷也是这么个意思,
不过我觉得呢,比如String类的equals,你拿个自定义对象去比它也是只会返回给你一个false,貌似Java自带的这些类的equals方法还没有见过抛异常的情况,所以我就想知道他们不选择抛异常的理由又可能是什么呢
作者: ixiangfeng    时间: 2013-11-5 21:19
~﹏~ 发表于 2013-11-5 20:24

兄弟 你理解错人家的意思了
作者: ixiangfeng    时间: 2013-11-5 21:26
零下五度的水 发表于 2013-11-5 21:12
嗯,毕爷也是这么个意思,
不过我觉得呢,比如String类的equals,你拿个自定义对象去比它也是只会返回给 ...

现在还没达到这个深度 第一遍视频才看到11天呢
作者: 寻找资拥。    时间: 2013-11-5 23:12
计算机判断两个对象是否相等的原则:
        首先是判断hashcode码,如果hashcode码相等,那么才会
        去触发equals方法,比较对象的内容。

        equal:判断是内容。

        总结:基本类型和字符串可以直接用equals判断两个对象
        相等,但是我们自己定义的类,要判断两个对象是否相等
        必须重写hashcode和equals方法。

你上面两个对象不是同一个类的对象,他们去判断相等返回的肯定是false,不存在什么异常。
个人理解,希望能对你有所帮助。
作者: 黄炳期    时间: 2013-11-6 09:06
{:soso_e113:}楼主这问题太深入了~
作者: 零下五度的水    时间: 2013-11-6 11:40
寻找资拥。 发表于 2013-11-5 23:12
计算机判断两个对象是否相等的原则:
        首先是判断hashcode码,如果hashcode码相等,那么才会
        去触发equals ...

额,其实。。。这个抛异常的行为是毕爷做的,然后我就没想通他为什么要选择抛异常
作者: 寻找资拥。    时间: 2013-11-6 21:13
零下五度的水 发表于 2013-11-6 11:40
额,其实。。。这个抛异常的行为是毕爷做的,然后我就没想通他为什么要选择抛异常 ...

那他是不是用这个例子讲,自定义异常?
作者: 零下五度的水    时间: 2013-11-6 21:26
嗯,我没写不相关的代码,
ClassCastException 不是自定义异常吧




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