问答详情
源自:-

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

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

public boolean equals(Object obj) {

...

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

return false;

HelloWorld other = (HelloWorld) obj;

...

}

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


提问者:一青 2016-08-05 11:42

个回答

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

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

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

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

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

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

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

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