重写equals的代码中已经用getclass判断了两个对象的类型是否一样为什么还要再强制转换一次?

来源:-

一青

2016-08-05 11:42

在重写equals的时候里面有这几行代码,

public boolean equals(Object obj) {

...

if (getClass() != obj.getClass())

return false;

HelloWorld other = (HelloWorld) obj;

...

}

这里已经用getclass判断了两个对象的类型是否一样为什么还要再强制转换一次?


写回答 关注

4回答

  • ziom
    2016-08-05 15:09:03
    已采纳

    你的问题逻辑有问题,if (A != B),那么你再写B = A是要赋值还是判断相等;相不相等是人为规定的一种状态,这状态是怎么样就怎么样,你没法通过比较两者改变这种状态。再有,B = A是赋值操作,B == A才是判断操作,然而 B == A只是单纯返回true 或 false,跟你一开始问的强制转换是没有关系的。计算机默认判断两个对象是否相等的方式是通过内存地址(这种默认当然也是人给计算机规定的),而重写equals方法就是改变这种计算机的默认判断方式,告诉计算,如果两个对象同属于一类,同时它们属性值相等,那么它们就是相等的。

    一青 回复ziom

    哈哈,可惜这个不能自己设置积分,不然肯定给你多一点

    2016-08-05 15:54:26

    共 3 条回复 >

  • 慕移动9181930
    2022-03-26 02:45:09

    我也想到你说的这个问题,而且老师这个左侧菜单栏小于屏幕高度的话会出现掉下来的问题

  • ziom
    2016-08-05 14:25:52

    很多人类认为理所当然的事情,你如果不明确告诉计算机它就不会知道,比如有一个未知性别的人,我们可以这样判断:如果ta不是男人,那ta就是女人(这里不考虑人妖),但如果你只告诉计算机这个人不是男人,计算机是无法判断ta是女人的,计算机只是[单纯知道了这个人不是男人],你只有继续跟计算机明确说明这个人是女人才行。

    一青

    非常感谢你的回答,但是我还是有一点不清楚。相等和不相等是两个完全对立的情况,如果不是这个就肯定是另外一个。按你的说法,如果有两个变量A = 3,B = 3,用if(A != B)判断以后难道还要再写一步B = A才能让B和A相等吗?

    2016-08-05 14:46:13

    共 1 条回复 >

  • ziom
    2016-08-05 13:34:29

    他要达到的目的就是强转,只有强转以后才可以进行后续判断。

    ziom 回复ziom

    靠,慕课网吃了我的回复。。。

    2016-08-05 14:24:22

    共 4 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530559 学习 · 6091 问题

查看课程

相似问题