随便记下来点 挑着汉化 没人看所以内容不是很严谨
【等价性equality】
- hashcode是让不同的对象映射到不同的区,对于类似hashmap,hashset那种东西是必备的,但目前我还没重写过,我猜一般不涉及对hash什么东西的调用应该不用鸟他?
- 它说不可变类型等价看AF(AF时表示空间到抽象空间的映射,这个用户不需要知道,就是我们写的抽象函数),可变类型等价看引用(我问了一牛人,引用差不多就是行为等价,行为等价差不多就是看是否指向一个内存位置)。
- 对不可变类型,观察等价性和行为等价性是一样的,因为他们没有用以改变的方法。
- 观察等价性就是调用他们的观察方法,比较返回值不出现区别就算,比较简单比较直接比较不负责任,够用就行。
- 对可变类型判定等价只需要实现行为等价性。
- 这是对hashcode比较具体的解释,我大概明白了一些,equal的对象一定要有相同的hashcode,但是不同的对象不一定hashcode非得不一样。
- “==”(py里是is)一般用作引用等价,就是看比较对象是不是指向同一块内存区域,“equals()"是对象等价性,这个对象等价性应该在自己做ADT的时候定义好,重写一个合适的quals。
好习惯小tips
- 不做修改方法
- 不乱重写方法
- 尽可能多地声明final和private
- 可变部分时刻用checkrep掐着
- toString,hashcode,equals,逢类必写(自制ADT类)(我不知道hashcode有咩有严格要求)