正确的equals方法必须满足5个条件:
1)自反性,对任意x,x.equals(x)一定返回true。
2)对称性,对任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true。
3)传递性,对任意x、y、z,如果 有x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true。
4)一致性,对任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用x.equals(y)多少次,返回的结果应该保持一致,要么一直是true,要么一直是false。
5)对任何不是null的x,x.equals(null)一定返回false。
默认的Object.equals()只是比较对象的地址。
设计hasCode时最重要的因素就是:无论何时,对同一个对象调用hasCode()都应该生成同样的值。
对于equals()相同的两个对象,hashCode()一定相同;
对于hashCode()相同的两个对象,equals()不一定相同。
对于String而言,hashCode()是基于String的内容的。即内容相同的两个String,它们的hashCode()必定是相同的。
1)自反性,对任意x,x.equals(x)一定返回true。
2)对称性,对任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true。
3)传递性,对任意x、y、z,如果 有x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true。
4)一致性,对任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用x.equals(y)多少次,返回的结果应该保持一致,要么一直是true,要么一直是false。
5)对任何不是null的x,x.equals(null)一定返回false。
默认的Object.equals()只是比较对象的地址。
设计hasCode时最重要的因素就是:无论何时,对同一个对象调用hasCode()都应该生成同样的值。
对于equals()相同的两个对象,hashCode()一定相同;
对于hashCode()相同的两个对象,equals()不一定相同。
对于String而言,hashCode()是基于String的内容的。即内容相同的两个String,它们的hashCode()必定是相同的。