equals()到底是比较什么

来源:2-2 Java 中字符串的不变性

小僧一戒

2015-09-23 21:44

equals()比较的到底是对象的引用是否指向同一内存地址,还是比较的对象的值是否相同

写回答 关注

4回答

  • 无动于衷
    2015-09-23 22:19:00
    已采纳

    那要看调用equals()方法的对象所对应的类 里的equals方法是怎么写的了。

    举个例子。

    一般的类没有重写Object类的equals()方法,比如你随便定义一个类Student,那么当我Student t = new Student();t.equals(??)这里就会调用父类的equals()方法。Object类里的equals方法比较的是地址,所以我写的这个类比较的也是地址。

    而有些类为了一些使用上的方便合理,于是便重写了equals()方法。比如String类,当我们使用字符串时,当他们内容相同时,我们会认为他们没有什么不同,我们希望两个内容一致的String对象用equals()比较会返回true。而String类中的equals()方法正是这样重写的,只要内容相等,A.equals(B)就是true,在String的对象调用equals()方法时,就是比较内容。

    当然,我们也可以自己去重写equals()方法,从而让我们自己写的类达到自己的期望。比如说,依然是一个Student类,我现在希望说如果两个Student姓名,学号相同,我就认为他们是一样的。我就可以重写equals()方法,如果两个对象的id、name全相等,那么就返回true,否则返回false。

    所以记住Object类里的equals()方法比较的就是地址,而所有的类都直接或间接继承自Object,这些子类的equals()方法是比较什么,就看他们是如何重写equals()的。重写equals()最典型的例子就是String类了。

    小僧一戒

    非常感谢!

    2015-09-24 21:46:23

    共 1 条回复 >

  • 许建皓
    2015-09-24 08:24:00

    就像 两个人,比较长相一样不。  也就是内容一样不

  • 天启之魂
    2015-09-23 23:22:13

    没重写的equals()就是比较的就是地址,重写了比较的就是你自己定义的内容

  • _Exception
    2015-09-23 21:59:45

    内容是否相等

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题