软件构造笔记 等价性

       在编写程序时,我们常常需要比较两个对象是否等价。 在我们学习C语言的时候,我们几乎都是使用==来判断两个值是否相等。但是这个方法在面向对象的Java中是不可取的。

        这是因为==在Java中的行为是比较两个两个对象的地址是否相等。也就是说==只能判断两个对象是否是同一个对象,而不能判断两个对象是否等价。

        打个比方,在实验一和实验二中我们都用到了Person类,在设计Person类的时候,我只给他安排了一个name作为成员属性。理论上只要name等价我们就能判断两个人是同一个人。假设我们建立了两个Person对象都叫做小明,此时如果我们使用==来判断两个对象的等价性就会出现问题,因为两个小明虽然我们认为是同一个人,但它们并不是同一个对象,地址不相同,因此==判断就会导致判断它们不是一个对象。想必大家在实验二中应该以及吃过这个苦头了(反正我是出问题了,出问题后一天老师讲了这个)。

        为了解决这个问题我们采用equals方法来判断两个对象是否等价。但别以为用了equals就万事大吉了,因为equals的默认方法还是用==比较两个对象是否相等(没想到吧,我又回来了)。因此为了让我们的equals方法能正常运行,我们要使用Override来重写这个方法。

        虽然说得轻松,但这个重写实际上还涉及到多态、向上造型甚至向下造型以及实例的问题,不过只是想要代码跑起来到不需要理解的那么透彻。简单来说就是通过Object的父类来接住我们传进来的对象,再判断传进来的对象是否是我们当前需要的类的一个实例。如果是就通过向下造型把他改造成我们需要的实例,最后根据我们的需求再用观察器判断两个类是否相等。

        是不是很简单呢?但要注意,我们构造等价的时候必须要遵守传递性对称性和自反性,即a=b,b=c那么a=c,a=a,b=a,b=b等等。否则就会与现实世界中等价的定义相矛盾(大家都学过集合论了,懂得都懂)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值