重写equals方法的安全写法
1. 什么是equals方法?
我们首先得知道,Object类是 Java中所有类的父类(超类/基类),也就是说,在Java中,所有的类都是默认继承自Object类的,换言之,Object类中所实现的方法我们都可以直接拿来用。而equals方法便是Object类所实现的众多方法之一。
以下截图自Java11 API
Object类的所有方法:
1.1 equals方法:
equals
:是Object类
中的方法,只能判断引用类型,等下可以带大伙看看jdk
源码
2. 为什么要重写equals方法?
我们有Object类
实现的equals
方法能用不就行了?为啥还得重写equals
方法呢?这就要看看Object类
的equals
方法实现机制了。
2.1 举个例子吧~
比较两个int时可以直接用 == ,当它们相等时结果为true
,而当new
了两个属性完全一样的对象时,再用 ==
来进行比较就会出现错误,如我们所见,明明我们应该想要得到true
的,结果却是false
源码:
运行结果:
到这里,我们应该大致清楚为啥要在比较对象时重写equals
方法了,因为Object类
提供给我们的不好使~~
//String类equals源代码: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }