JAVA中的等价性

1.可变对象的等价性

可变对象的等价性分为观察等价性和行为等价性。

观察等价性:

在不改变状态的前提下,两个对象是否“看起来”一致。这句话的意思是,如果我们只从用户的角度去观察这两个对象并且不调用改变它们的状态的方法的话(只调用observer、creator、producer类方法而不调用mutator方法),他们之间所展现出的等价性即为观察等价性。

行为等价性:

调用两个对象的任何方法(包括mutator)两个对象都能产生一致的结果。因为它们能产生“一致的行为”,所以被称为行为等价性。

区别:

对于mutable类型,它的观察等价性就是两个对象在某一时刻看起来相等,而行为等价性就是时时刻刻都相等。而对于mutable类来说做到每时每刻都相等只能在两个对象指向同一块物理内存空间的时候才可能发生。

2.不可变对象的等价性

immutable类中的属性一般不允许改变(可以进行有益的改变,即改变前后在用户空间去看发现不了变化),所以immutable类的观察等价性与行为等价性相同。

3.==与equals()

==:

==比较的是引用,也就是说,测试的是引用等价性。如果两个索引指向同一块存储区域,那它们就是==的。

equals():

equals()操作比较对象内容,也就是测试的是对象等价性

在自定义ADT时,需要重写Object的equals()

用法:

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值