equals和==是每个类都具有的方法,继承自object,在最初的源头,也就是object里面,这两个方法是等价的,均是比较对象的首地址是否相等(对象的首地址也就是创建的对象在栈内存的地址)。
java中重写equals方法,可以实现个性化的比较,更具灵活性,以满足日常工作需要。equals方法最初先比较对象的hashcode是否相等。(hashcode也就是哈希码,是根据一定的计算规则算出对象的hash值,是一个int类型的值,具体的规则不是很清楚,据说是根据对象的首地址作为依据,然后算出来的值,因此首地址相同的hash值肯定是相同的,但是hash值相同的却不一定是同一个对象);
equals方法重写时注意事项:
1.null值比较肯定为false
2.equals方法重写,hashcode也要重写,并且equals方法的比较要满足hashcode值相等,也算是一种约定(这个在集合中体现出来)
3.自反性 : x.equals(x)
4.对称性:x.equals(y)=true那么y.equals(x)=true
5.传递性:x.equals(y)=true y.equals(z)=true 那么x.equals(z)=true