equals方法相关总结

 先说一下Object类吧:

   这是一个号称为祖宗类的东西,是所有类的父类,也是唯一一个没有父类的类。

   接口不继承object类

   并且Object类存在于java的lang包中,我们都知道存在于lang包中的类我们是可以直接使用的,后面总结的也都是这方面的

   今天说一下Object类中的equals方法吧

   对于这个方法的总结最先有些懵,借鉴了upload/201812201445151760.gif" alt="复制代码" style="max-width: 900px; height: auto; border: none !important;" />

public boolean equals(Object obj) {         return (this == obj);     }
复制代码

 

二.该方法和“==”的区别

这是来自于《java编程思想》的一段原话:

“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”    

简单来说“==”是用来判断两个变量之间是否相等。

equals方法是用来比较地址是否相同的(我们根据上面的源码来解释一下吧)

this==obj      obj是我们传过来的对象地址,this存放的是本类对象的地址

复制代码
public class Main {      /**      * @param args      */    public static void main(String[] args) {         // TODO Auto-generated method stub                int n=3;         int m=3;                  System.out.println(n==m);                  String str = new String("hello");         String str1 = new String("hello");         String str2 = new String("hello");                  System.out.println(str1==str2);                  str1 = str;         str2 = str;         System.out.println(str1==str2);     }  } 结果:    true          false          true
复制代码

对于第一个结果相信我们都知道是为什么:因为他直接比较的数值的值是否相等3==3所以返回值一定是true。

对于第二个结果就会有些不理解了:上面不是说“==”比较的是数值是否相同吗?   在这里我们应该了解到引用类型的变量存的并不是数值,他们存的是每一个对象的地址,我们每实例化一个对象就会在堆中重新创建一个对象,其地址不一样.   所以这里因为地址不一样所以返回值为false。

那么对于第三个结果就很好解释了:我们使str1,str2地址相等,所以返回值一定是true。

所以从这里可以看出来“==”比较的是具体数值,但就看你变量存的是啥数值了,可能是地址,或者一个值之类的。

 

三.通过一个代码来说明一些问题

复制代码
public class Main {      /**      * @param args      */    public static void main(String[] args) {         // TODO Auto-generated method stub                 String str1 = new String("hello");         String str2 = new String("hello");                  System.out.println(str1.equals(str2));     } }
结果:true
复制代码

 

四.对于上面问题的解释

我们上面说了equals方法比较的是地址,实例化之后地址一定不一样了.但为什么上面程序结果是true

我们应该知道Object是所有类的父类,String类也不例外.可是身为子类,总得有点特权吧(要不然这爹白叫了),没错重写方法,因为在String类中重写了equals方法,所以比较的就不再是地址了,而是传过去的参数.

至于他是怎样比较的,我在下面会将我的比较自己写的简陋但易懂的重写方法写出来

现在这里是java中String类中equals方法的重写

复制代码
public boolean equals(Object anObject) {         if (this == anObject) {             return true;         }         if (anObject instanceof String) {             String anotherString =
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信