node.getProperty
为什么此代码不打印输出为class A
{
int a=10,b=10,c=10;
}
class Equals
{
public static void main(String s[])
{
A a,b;
a=new A();
b=new A();
if(a.equals(b))
{
System.out.println("We r same...");
}
else
{
System.out.println("We r not same...");
}
}
}
?
我无法理解这个程序背后的逻辑。
答案 0 :(得分:2)
对象的那些不一样,因为您正在检查引用相等性。你必须使用equals()
方法。
将此添加到您的class A
:
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
A ref = (A)obj;
return ref.a == this.a && ref.b == this.b && ref.c == this.c ;
}
而不是写a==b
检查a.equals(b)
答案 1 :(得分:1)
默认情况下,equals
方法将返回两个对象是否实际相同。在你的情况下,它们是不同的,因此输出。
你可以这样看待 - 你还没有被告知你认为是什么"平等"您的对象A
。
解决问题的方法是为equals
课程实施A
方法。
答案 2 :(得分:1)
这是因为' =='运算符仅检查两个对象是否引用相同的内存。如果两者都引用相同的位置,则返回true。
例如:a=new A();
b=a;
然后,a == b返回true,因为两者都指向相同的位置。
答案 3 :(得分:0)
java中的Equals()比较对象以查看它们是否在某种程度上相同。您创建的两个对象具有不同的引用,因此equals不会返回true。第一次误读了这个。
答案 4 :(得分:0)
equals
是从object
继承的方法,您可以根据需要覆盖它。
class A
{
public int a=10,b=10,c=10;
public boolean equals(Object a){
if(a == null) return false;
if(!(s instance A)) return false;
A other = (A)a;
if(other.a == this.a && other.b = this.b && other.c == other.c)
return true;
return false;
}
}
答案 5 :(得分:0)
a和b是A类的不同实例。为什么你认为它们应该相互相等,因为它们具有相同的类?
你应该重写类A中的equals方法来实现你自己的逻辑,以确定类A的两个实例是否相等。例如:
public boolean equals(Object o) {
if (o==null) return false;
A o2 = (A) o;
return this.a == o2.a && this.b == o2.b && this.c == o2.c;
}