在Java中关于equals方法对象和类

问题描述:

让我们在Java中说我有一个A类和延伸A.在Java中关于equals方法对象和类

注意B类:类A和B 在他们的equals方法!

我做的:

A a = new B(); 
B b = new B(); 
a.equals(b); 

它配备了假的。我认为,当我们做到平等时,它动态地绑定到a和b,这会使它成为现实。或者是因为在编译时它看起来是a,并假设equals将是equals(A),并且因为它的B为B b = new B();它说错了?还是我在两条战线上都错了?

+2

如果你没有定义一个'equals()'方法,那么默认的'equals()'方法(为所有的'Object'定义)与'=='相同。这意味着只有当对象是同一个对象时(它不会查看对象中的任何数据)它才会返回“true”。您创建了两个对象,因此它们不一样。 – ajb

+0

鉴于'a'和'b'清楚地指向不同的对象,为什么会期望通过'a.equals(b)'比较它们是'真实的'? – dave

+0

如果你为'B'定义了一个'equals()'方法,那么'a.equals(b)'确实会调用这个方法。所以你几乎是正确的 - 'equals'动态绑定。但是当你没有定义它时会发生什么,你错了。 – ajb

如你不重写equals它将使用Object的方法

如果你看看源代码,对象

@param obj the reference object with which to compare. 
public boolean equals(Object obj) { 
    return (this == obj); 
} 

显然a有不同的refernce到b从而false

+0

啊,我帮你了!我出于某种原因,对象等于参数有if(instanceOf)或其他什么的印象。谢谢所有的澄清! – Newb18