equals里面的equals为啥work?

来源:6-1 学生选课---判断 List 中课程是否存在

红袖侍读

2016-06-14 01:13

重写equals方法,最后一个if判断:if (this.name.equals(cr.name)) 这里用到的equals方法是原始的么?为什么这两个名字的判断会给出true的可能,按原始定义,两个不一样的对象不是应该返回false么,即使内容一样?

写回答 关注

2回答

  • helloworld2008
    2016-06-22 13:36:22
    已采纳

    你的理解一部分对,一部分不恰当。

    其实就是String是简单的引用类型,所以用equals时,程序内部知道去判断两个字符串中的一系列字符是否一样,从而得到判断结果,但是遇到一个复杂点的对象,计算机不知道我们认定的“相同”的判断规则,所以需要我们覆写这个equals方法。想想如果各种类型都能够判断的话,计算机需要做的工作太复杂了。比如一个对象有十个属性,他就需要去分别比较每个属性的值,如果每个属性又都是复杂的类型,那比较工作就一套嵌一套,没完没了了。效率是不是很低呢?所以根据用户需求自己去覆写是最好的了。

    equals:判断值是否相同。

      ==    :判断地址是否相同。

    对于String类型的,如果你利用他的构造函数创建String对象,即使两个值相同,用==也是不相等滴!他们两个本质上是不一样的奥~

    hellow... 回复红袖侍读

    嘿嘿。共同进步~

    2016-06-23 11:31:50

    共 2 条回复 >

  • kingdompeak
    2016-06-15 20:56:22

    是原始的
    对象之间的判断是用==号,而equals方法是用来判断字符串中的内容是否相等。

    不知对否,第一次回答问题。

    红袖侍读

    equas当然也用来判断对象啊,不然为什么要重写呢。这个道理我已经明白了,equals如果判断基本简单类型,像字符串这种,是能给出准确判断的, 所以if (this.name.equals(cr.name)) 这条语句执行结果是正确没问题的,只有碰到类对象这种复杂类型,才需要重写,因为原始的equals和==号一样,对类对象来说只能判断二者在内存中的地址而非内容,当我们需要对对象里的内容判断是否一致时它们都只能给出false的结果,因此这种情况下必须对equals重写,而==号就没辙了,似乎没有别的办法让==号判断类对象内容的一致

    2016-06-15 22:10:50

    共 1 条回复 >

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题