等于如何在java中工作?

时间:2015-10-18 08:49:10

标签: java

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..."); } } }
我无法理解这个程序背后的逻辑。

6 个答案:

答案 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;
   }
}

请参阅Overriding the java equals() method quirk

答案 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;
}