软构chapter6-ADT和OOP中的等价性

ADT抽象数据结构

OOP面向对象编程

等价定义

  • 三种方式定义等价:
    • AF(abstract function)抽象函数AF定义ADT的等价
    • 观察:在外部观察者角度,对两个对象调用任何相同操作,得到相同结果
  • ==和equals()区别
    • 类型不同
      • equals是超类Object中的方法
      • ==是操作符
    • 比较对象不同
      • equals用来检测两个对象是否相等,即内容是否相等
      • ==两种情况
      • 基本数据类型:比较值是否相等
      • 引用数据类型:比较引用的地址是否相同
    • 运行速度不同:==快
      equals是Object类中的方法,可以重写

基本数据类型,用==

对象类型判断,用equals

重写equals

  • 重写equals
    图片

此时注意重写和重载区别,方法签名不同,则是重载

Java HashCode详解 - 云+社区 - 腾讯云 (tencent.com)

java重写equals方法需要注意的几点 - silenceer - 博客园 (cnblogs.com)

Java重写equals方法(重点讲解) - 江河湖泊 - 博客园 (cnblogs.com)

什么时候需要重写,什么时候不需要重写

ppt里其实很清楚

图片

关于散列表(或集合)中的等价判断

图片

放入map的时候,自动转换成了Integer类型。

其中,get到的数据类型是Integer,Integer把-128到127的整数都提前实例化了, 所以你不管创建多少个这个范围内的Integer都是同一个对象,他们的id相同。因为“==”比较的是地址,

在这个范围外的数值,没有提前实例化,所以地址不同。

以下是例子

Integer a=300;
Integer b=300;
System.out.println(a==b);//false
System.out.println(a.equals(b));//true

所以对于-128到127的整数,可以直接用“==”来判断是否相等,对于范围之外的数,应使用equals来比较
附equals

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

(91条消息) Java中Integer类型的比较_九州殊口二的博客-CSDN博客_integer类型比较

posted @ 2022-06-10 11:30  bleemyoung  阅读(48)  评论(0)    收藏  举报