为什么需要重写equals方法

默认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是一个本地方法,他返回的是这个对象的内存地址。

知道了这些之后我们接着往下看。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章