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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 零下五度的水 高级黑马   /  2013-11-5 19:44  /  1397 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Student{
        public boolean equals(Object obj){
                if ( !(obj instanceof Student) )
                       throw new ClassCastException("类型不匹配");

该怎么看待他抛出异常而不是返回false,求质量回答

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

10 个回复

倒序浏览
  1. Teacher t=new Teacher();
  2. Student s=new Student();
  3. System.out.println(s.equals(t));//在调用s的equal方法时发现t不是s的实例,直接将异常抛到main函数的调用者,即控制台,程序中断了,怎么返回false呢?
复制代码
回复 使用道具 举报
个人认为  如果返回false的话不妥 假如原意要比较的是两个学生的性别, 如果这里返回false会让人误认为是两个学生的性别不一样 但传入的可能是狗类、或者电脑类 这样的话下面再继续运行也就没意义了 因此抛出异常更合适

评分

参与人数 1黑马币 +2 收起 理由
乔兵 + 2

查看全部评分

回复 使用道具 举报
ixiangfeng 发表于 2013-11-5 20:27
个人认为  如果返回false的话不妥 假如原意要比较的是两个学生的性别, 如果这里返回false会让人误认为是两 ...

嗯,毕爷也是这么个意思,
不过我觉得呢,比如String类的equals,你拿个自定义对象去比它也是只会返回给你一个false,貌似Java自带的这些类的equals方法还没有见过抛异常的情况,所以我就想知道他们不选择抛异常的理由又可能是什么呢
回复 使用道具 举报

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

现在还没达到这个深度 第一遍视频才看到11天呢
回复 使用道具 举报
计算机判断两个对象是否相等的原则:
        首先是判断hashcode码,如果hashcode码相等,那么才会
        去触发equals方法,比较对象的内容。

        equal:判断是内容。

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

你上面两个对象不是同一个类的对象,他们去判断相等返回的肯定是false,不存在什么异常。
个人理解,希望能对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
{:soso_e113:}楼主这问题太深入了~
回复 使用道具 举报
寻找资拥。 发表于 2013-11-5 23:12
计算机判断两个对象是否相等的原则:
        首先是判断hashcode码,如果hashcode码相等,那么才会
        去触发equals ...

额,其实。。。这个抛异常的行为是毕爷做的,然后我就没想通他为什么要选择抛异常
回复 使用道具 举报
零下五度的水 发表于 2013-11-6 11:40
额,其实。。。这个抛异常的行为是毕爷做的,然后我就没想通他为什么要选择抛异常 ...

那他是不是用这个例子讲,自定义异常?
回复 使用道具 举报
嗯,我没写不相关的代码,
ClassCastException 不是自定义异常吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马