欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

equals方法那些事

程序员文章站 2022-08-05 21:54:51
1.Equals 很多人对equals方法的用法有些模糊,这里来为大家梳理下: 字符串中的equals方法,该方法用来判断两个字符串的内容是否相同。 例1: 从例1中我们可以看出,两个字符串之间的比较,无论用”==”号还是equals来进行,只要内容相同,结果就为True,内容不同,结果就为Fals ......

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 可以进入字符串源码中,

equals方法那些事

 

可以看出,string类重写了object类的equals方法,所以能够完成内同比较功能。如果是我们自定义类的两个对象要进行比较内容是否相同,也需要进行覆盖重写object中的equals方法

equals方法那些事

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方法!!!