equals
equals()方法 通常较多的都是用来比较值
性质:
- 自反性:对于任意不为null的引用值x,x.equals(x)一定是true
- 对称性:对于任意不为null的引用值x和y,当且仅当x.equals(y)是true时,y.equals(x)也是true
- 传递性:对于任意不为null的引用值x、y和z,如果x.equals(y)是true,同时y.equals(z)是true,那么x.equals(z)一定是true
- 一致性:对于任意不为null的引用值x和y,如果用于equals比较的对象信息没有被修改的话,多次调用时x.equals(y)要么一致地返回true要么一致地返回false
- 对于任意不为null的引用值x,x.equals(null)返回false
hashCode
hashCode()方法给对象返回一个hash code值。
- 在一个Java应用的执行期间,如果一个对象提供给equals做比较的信息没有被修改的话,该对象多次调用hashCode()方法,该方法必须始终如一返回同一个integer。
- 如果两个对象根据equals(Object)方法是相等的,那么调用二者各自的hashCode()方法必须产生同一个integer结果。
equals和hashcode比较
- 1.如果两个对象
相同
,那么它们的hashCode值一定要相同
- 2.如果两个对象的hashCode相同,它们
并不一定相同
(这里说的对象相同指的是用eqauls方法比较), 如不按要求去做了,会发现相同的对象可以出现在Set集合中,同时,增加新元素的效率会大大下降。 - 3.equals()相等的两个对象,hashcode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
换句话说,equals()方法不相等的两个对象,hashcode()有可能相等(我的理解是由于哈希码在生成的时候产生冲突造成的)。反过来,hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。
protected
- 基类的protected成员是包内可见的,并且对子类可见;
- 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
参考:https://blog.csdn.net/zj15527620802/article/details/88547914