软件构造课程笔记10——第8章-ADT和OOP中的“等价性”

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

·判相等是在A空间而不是R空间!

·Immutable类的对象判相等:

①【AF角度】:AF映射到同样的结果,则等价;

②【观察角度】:对于两个对象,针对于这个类中所有的操作,都会得到相同的结果,则等价;

注:==【引用等价性】VS对象等价性:==判相等对基础类型适用,而对于对象则有些严格了,要求两个对象必须指向同一内存空间,没法起到想要的判相等的作用,因此对象之间判相等一般用equals()方法。

·equals()方法存在于Object中,但原始默认判断引用等价性,因此在类中需要重

·只有在判相等的方法中才可以使用instanceof操作,因为它会类型强转,不安全。

·等价的对象必须有相同的hashCode,不等价的对象可以有相同的hashCode,也可以不同

·hashCode()方法存在于Object中,但原始默认判断引用等价性,因此在类中需要重

·如果重写了equals()方法,一定要重写hashCode()方法,除非你能保证你的ADT不会被放入到Hash类型的集合类中。

·Mutable类的对象判相等:

①【观察等价性】:在不改变状态的情况下,(在某个时间点)两个mutable对象是否对类中的所有方法都得出一致的结果;

②【行为等价性】:(在任何时间点)调用对象的任何方法都展示出一致的结果。

·==既能对基础类型判相等,也能对对象判相等,只不过有些严格,相当于【行为等价性】。(但不是不能)

·写的mutable类推荐继承Object类里的equals方法和hashCode方法,实现行为等价性,不要进行重写。

·对于immutable类,必须重写equals方法和hashCode方法(这两个方法是绑定的,重写一个就要重写另一个)

·clone方法:将一个对象的内容copy到一个新对象中,需要注意的是clone是浅copy不是深copy,即对于基本数据类型直接赋值,而对于对象数据类型不改变变量的引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值