java中的equals()和运算符“==”
我知道equals()
会比较对象的值,’==’运算符会检查变量是否指向同一个内存。
我不明白equals()
如何比较对象的值,例如:
class Test { public Test(int x, float y) { this.x = x; this.y = y; } int x, float y; } Test test1 = new Test(1,2.0); Test test2 = new Test(1,2.0);
所以,如果我使用equals()
,它会比较每个对象中的每个属性吗?
那么如果我们谈论String呢? 使用equals()和operator“==”,我们还需要覆盖equals()吗?
不,如果你没有覆盖你的类中的equals
-method,则equals
与==
相同。 请参阅以下文档 :
类Object的equals方法实现了对象上最具辨别力的等价关系; 也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。
文档还说明了equals
方法的要求,以防您想要实现它。
除非你按照Joshua Bloch制定的规则适当地超载它。
默认行为使用==
检查引用的相等性。
为对象重写equals
和 hashCode
很重要,特别是如果你打算在java.util.Collections中使用它们。
equals方法在Object类中定义,并且由于Java中的所有对象都隐式或显式地从此类inheritance,因此它们也将inheritanceObject实现的equals()方法。 如果对象通过“==”条件,Object中的默认实现将返回true。
但是,您可以自由地覆盖自己类中的equals()方法,并指定必须检查的条件以查看两个对象是否有意义相等。 例如,您可能会说两个实例只有在每个属性包含与另一个对象相同的值时才相等,或者您可能只想检查构成对象“业务键”的一些属性而忽略其他属性。
String类的相等遵循与Java中任何其他类相同的规则; 如果它们引用同一个实例,则“==”将为true,如果它们包含相同的值,则equals()将为true。