软构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;
}


浙公网安备 33010602011771号