前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >equals方法比较的是内容?谁告诉你的

equals方法比较的是内容?谁告诉你的

作者头像
田维常
发布2021-07-15 15:46:01
3410
发布2021-07-15 15:46:01
举报

故事

前段时间,我给一位小伙伴做在线模拟面试的时候,随口问了一句:”说说 ==和equals方法的区别?“,结果给我回答一个equals方法是比较内容的。

我们先来说说====比较有两种情况:

1.比较的是基本数据类型

int a=100;
int b =10;
//比较的是两个变量对应的值
if(a==b){
    System.out.println("出问题了");
}

2.比较的是引用类型

Integer a=Integer.valueOf(100);
Integer b =new Integer(100); 
//比较的是a和b指向的对象地址是否相同
if(a== b){
    System.out.println("出问题了");
}

然后,我们再来说说equals方法。

equals方法是在Object中定义的,具体如下:

public boolean equals(Object obj) {
        return (this == obj);
}

从这方法里,我们能得出结论:如果不重写equals方法,那么比较的就是两个对象地址。

至于,重写了,比较的是什么?

这就好比吃饭,在大多数人心中,提到吃饭,就会想到吃面或吃米饭。对不起,现在很多人所谓的吃饭可能就是只吃菜,并没有吃米饭或面。

下面我们来说说,两个常见类:String类和Integer类。

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;
}

从整个方法的源码逻辑,我们很容易看出,String类的equals方法也不是一定要比较内容,先是比较两个对象地址,然后比较长度,在比较具体内容。

Integer类中的equals方法:

public boolean equals(Object obj) {
    //比较类型
    if (obj instanceof Integer) {
        //先拆箱 再比较具体值
        //注意 这里的value 是int类型的变量
        return value == ((Integer)obj).intValue();
    }
    return false;
}

总结

这个面试题,看似很简单,我后面还可以问了另外两个三年的工作的朋友,回答也是和前面那位朋友的一样。下面对此进行一个总结:

==如果是用于基本数据类的比较,则比较的是具体值,如果比较的是引用类型(包装类型),则比较的是两个对象指向的对象地址是否相等。

equals方法,默认不重写的情况下是比较两个对象的地址是否相同。如果自己对equals方法重写了,那就得看是怎么重写的。

好了,今天就分享到这里,记得关注我,讲述一些不一样知识点,还能附带的带着你看一些源码,记住:很多好东西都在源码中才可以看到的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档