为了账号安全,请及时绑定邮箱和手机立即绑定

equals里面的equals为啥work?

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

正在回答

2 回答

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

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

equals:判断值是否相同。

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

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

0 回复 有任何疑惑可以回复我~
#1

红袖侍读 提问者

谢谢补充说明,非常感谢!
2016-06-22 回复 有任何疑惑可以回复我~
#2

helloworld2008 回复 红袖侍读 提问者

嘿嘿。共同进步~
2016-06-23 回复 有任何疑惑可以回复我~

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

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

0 回复 有任何疑惑可以回复我~
#1

红袖侍读 提问者

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

举报

0/150
提交
取消

equals里面的equals为啥work?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信