问答详情
源自:2-2 Java 中字符串的不变性

equals()到底是比较什么

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

提问者:小僧一戒 2015-09-23 21:44

个回答

  • 无动于衷
    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 08:24:00

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

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

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

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

    内容是否相等