Equality in ADT and OOP

一、等价关系

等价关系:自反、对称、传递

二、Equality of Immutable Types

1、用AF判断

在A空间看相等,而不在R空间。若映射到A中值相等,则等价。

2、站在外部观察者角度判断

对两个对象调用任何相同的操作,都会得到相同的结果,则认为这两个对象是等价的。反之亦然!

若无操作则直接相等。

三、== vs. equals()

1、==       

 referential equality(引用等价性)

== 对基本数据类型,使用==判定相等。

如果用==,是在判断两个对象身份标识 ID是否相等(指向内存里的同一段空间)

2、equals()

object equality(对象等价性)。在自定义ADT时,需要重写Object的equals()

对对象类型,使用equals()

若equal()重写,则Hashcode()必须重写(必须保证相同的对象有相同的Hashcode,不同的对象无所谓)

四、mutable等价性

对immutable来说,观察等价性和行为等价性一样。

对mutable来说,观察等价性和行为等价性不一样,行为等价性要更严,因为其要求指向同一个对象且任意时间点都一样。总而言之,对mutable尽量实现行为等价性。

Object的equal()方法是行为等价性,所以对mutable类直接继承Object的equal()就好。

Object的clone()是浅拷贝,只对属性的类型进行拷贝,值没有拷贝(仍指向同一对象)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镞砺括羽吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值