浅谈equals方法
2018-03-16 本文已影响13人
一只很懒很懒的虫
在java的Object类中,它是属于所有java类的基类。
equals的方法实现就是很简单的比较两个变量的地址值是否相等。即用==来判断。
在实际中如果要判断两个对象的内容是否相等,比如Cat c=new("aa",1) Cat b=new("aa",1)按道理说这两个被new出来的对象地址肯定不相同的。如果没有重写该类的equals方法,则c.equals(b)输出为false。
如果想要让它们因为内容相同而返回为true,那就需要重写该类的equals方法。具体的写法就是首先的判断传入的这个对象是否属于这个类。然后就是this.某个属性和传入对象的某个属性两者的内容是否一致了。一般属性都是基本数据类型,所以直接用==就好了,如果存在其中不是基本数据类型的话直接调用它的equals方法比较即可。比如string类型。这样就可以判断对象内容相等的问题了。
这边顺便说说==比较的其实就是该变量的hashcode返回的值。所以如果当你的hashcode的计算方式改变的话那么==的意义也将改变。
有些类java已经把它们写死了,所以无法重写hashCode和equals方法。而自己自定义的类完全可以根据自己的需要去定义。
补充一点为什么重写equals方法的时候一定要重写hashcode方法呢。因为事实上new出的两个对象它们的hash值一定是不相等的。但是一般而言,因为判断两个对象是否相等如果用equals比较的话,要比较很多次,而如果直接计算hash值会更快速。只有在hash相等的情况下equals比较才有意义,所以在重写eqsuls的时候也要重写hashcode。