equals方法那些事
1.Equals
很多人对equals方法的用法有些模糊,这里来为大家梳理下:
字符串中的equals方法,该方法用来判断两个字符串的内容是否相同。
例1:
String str1="Hello"; String str2="Hello"; String str3="java"; //字符串默认比较的是内容是否相同 //"=="号比较 System.out.println("str1==str2:" + (str1 == str2));//true System.out.println("str1==str3:" + (str1 == str3));//false //equals比较 System.out.println("str1.equals(str2):" + str1.equals(str2));//true System.out.println("str1.equals(str3):" + str1.equals(str3));//false
从例1中我们可以看出,两个字符串之间的比较,无论用”==”号还是equals来进行,只要内容相同,结果就为True,内容不同,结果就为False;因此可以看出在字符串中,equals是用来判断两个字符串的内容是否相同.
那么在两个自定义对象之间的比较,是不是也是只要内容相同,就为True呢?我们来看代码:
例2:
//比较两个对象是否相同 Person p1 = new Person("小明", 18); Person p2 = new Person("小明", 18); System.out.println("p1.equals(p2):" + p1.equals(p2));//false
从例2中看,结果是False!!!这是为什么呢?
我们来分析下源码:
按住crtl+左键单击String 可以进入字符串源码中,
可以看出,String类重写了Object类的equals方法,所以能够完成内同比较功能。如果是我们自定义类的两个对象要进行比较内容是否相同,也需要进行覆盖重写Object中的equals方法
Object中的equals方法后结果为true了
//比较两个对象是否相同 Person p1 = new Person("小明", 18); Person p2 = new Person("小明", 18); // System.out.println("p1.equals(p2):" + p1.equals(p2));//false System.out.println("p1.equals(p2):" + p1.equals(p2));//true
总结:
1.默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。
2.对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法,在重写的equals方法中实现逻辑。
重点:如果要用equals方法对对象的内容比较,一定要重写Object中的equals方法!!!