重写equals方法,最后一个if判断:if (this.name.equals(cr.name)) 这里用到的equals方法是原始的么?为什么这两个名字的判断会给出true的可能,按原始定义,两个不一样的对象不是应该返回false么,即使内容一样?
你的理解一部分对,一部分不恰当。
其实就是String是简单的引用类型,所以用equals时,程序内部知道去判断两个字符串中的一系列字符是否一样,从而得到判断结果,但是遇到一个复杂点的对象,计算机不知道我们认定的“相同”的判断规则,所以需要我们覆写这个equals方法。想想如果各种类型都能够判断的话,计算机需要做的工作太复杂了。比如一个对象有十个属性,他就需要去分别比较每个属性的值,如果每个属性又都是复杂的类型,那比较工作就一套嵌一套,没完没了了。效率是不是很低呢?所以根据用户需求自己去覆写是最好的了。
equals:判断值是否相同。
== :判断地址是否相同。
对于String类型的,如果你利用他的构造函数创建String对象,即使两个值相同,用==也是不相等滴!他们两个本质上是不一样的奥~
是原始的
对象之间的判断是用==号,而equals方法是用来判断字符串中的内容是否相等。
不知对否,第一次回答问题。