默认equals在比较两个对象时,是看他们是否指向同一个地址的。
但有时,希望两个对象只要是某些属性相同就认为他们的quals为true。比如:
Student s1 = new Student(1,"name"); Student s2 = new Student(1,"name");
如果不重写equals的话,他们是不相同的,因为引用s1和s2指向的堆内存地址显然不一样,所以我们要重些equals,
判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较
equals方法和hashCode方法都是Object类中的方法,我们来看看他们的源码:
public boolean equals(Object obj) {
return (this == obj);
}
public native int hashCode();
可知,equals方法在其内部是调用了"==",所以说在不重写equals方法的情况下,equals方法是比较两个对象是否具有相同的引用,即是否指向了同一个内存地址。
而hashCode是一个本地方法,他返回的是这个对象的内存地址。
知道了这些之后我们接着往下看。