标签:块存储 als 一个 推出 数据 展示 对象 equal 构建
第三章第五节 ADT和OOP中的等价性
1.==与equals
==是引用等价性 ;而equals()是对象等价性。
== 比较的是索引。更准确的说,它测试的是指向相等(referential equality)。如果两个索引指向同一块存储区域,那它们就是==的。对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象。
equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等(object equality)。在每一个ADT中,equals操作必须合理定义
2.等价性判断方法
以上两种角度/定义实际上是一样的,通过等价关系我们可以构建一个抽象函数(译者注:就是一个封闭的二元关系运算);而抽象函数也能推出一个等价关系。
3.
Mutble类型应比较索引,immutable应比较值
观察等价性:在不改变状态的情况下,两个mutable对象是否看起来一致
行为等价性:调用对象的任何方法都展示出一致的结果
在不可变对象中,由于没有mutator,因此行为等价性和观察等价性一样。
在java中,大部分实现的mutable类型实现的是观察等价性,但是可能有bug
在自己写的程序,mutable对象最好实现行为等价类。
标签:块存储 als 一个 推出 数据 展示 对象 equal 构建
原文地址:https://www.cnblogs.com/masteryellow/p/9214301.html