等价性:
1. 行为等价性
行为等价性是针对方法这一层级的,即两个对象,如果调用他们的所用方法,最后的返回值/操作结果都一样,那么就说明他们具有行为等价性
2.观察等价性
观察等价性是针对对象的成员变量的,即两个对象,如果他们的observer返回值都一样,那么就说明他们是具有观察等价性
3.引用等价性
没有重写的equals方法的默认返回值,判断两个引用的地址是否相等,如果相等那么就具有引用等价性
计算机概念的等价:自反对称传递,这也是我们重写equals方法时所需要遵守的原则
hashcode:
通过成员变量的值来进行进制换算,得到新的结果,作为自身的hashcode,原则上,等价的对象应该具有相同的hashcode,不等价的对象应该具有不同的hashcode。hashcode可以在集合中判断是否已经有相同元素在里面了。父类重写了hashcode,如果没有特别需要,子类不需要重写hashcode。
mutable对象:对于mutable对象,一般来说无需重写hashcode和equals,实现行为等价性即可
引用与地址:代码快照
String b=new String("012938902183")
这个中,左边的b是一个引用,指向的是一个地址空间,而右侧是动态开辟的那个地址空间。由于String为immutable,所以若改变b的值,则会新开辟地址空间,然后 把b的指向改为新地址。区分生命与实际地址空间,可以让我们提高代码的可读性,可以用父类的引用开辟子类的空间,实现子类的功能。