什么是使用对象作为参数的构造函数?

时间:2013-11-25 21:15:37

标签: java class

我有以下代码,据我所知它应该返回像TRUE& FALSE但不幸的是,当我运行此程序时,其返回的输出ike False& False输出。为什么呢?

请解释一下这个程序的含义,帮助我。

//How to pass   objects as parameter in constructor
package learn.basic.corejava;

public class Test {

    int a,b;

    public Test(int i,int j) { 
        a=i;
        b=j;
    }

    boolean check(Test tobj)
    {
        if(tobj.a == a && tobj.b == b)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }

    public static void main(String[] args) { 
         Test obj1=new Test(100, 22);
         Test obj2=new Test(100, 22);
         Test obj3=new Test(-1, -1);

         System.out.println(obj1.equals(obj2));
         System.out.println(obj1.equals(obj3)); 
    }

}

为什么我认为“它应该返回True& False

  • 因为obj1的值设置为构造函数&类似地,obj2的值也设置为构造函数,因为在第一次比较中它们都是相同的,所以我认为它应该返回true进行此比较obj1.equals(obj2)

3 个答案:

答案 0 :(得分:3)

要测试两个对象是否相同(即:它们是否相同),请使用==,而不是equals()。通过问题中的示例输入,这将打印truefalse假设您已实施equals()

System.out.println(obj1.equals(obj2)); // true
System.out.println(obj1 == obj2);      // false

或许更有趣:

Test obj1 = new Test(100, 22);
Test obj2 = new Test(100, 22);
Test obj3 = obj2;

System.out.println(obj1.equals(obj2)); // true
System.out.println(obj1 == obj2);      // false
System.out.println(obj2 == obj3);      // true
System.out.println(obj1.equals(obj3)); // true

现在回到你的问题。问题在于你没有正确实现equals(),它测试对象之间的值相等,这就是你感兴趣的内容。对于问题中的代码, equals()的正确实现如下所示:

@Override
public boolean equals(Object obj) {
    if (this == obj)  // are the objects identical?
        return true;
    if (obj == null)  // is the other object null?
        return false;
    if (getClass() != obj.getClass()) // do the objects have the same class?
        return false;
    Test other = (Test) obj; // cast other object
    if (a != other.a) // is the `a` field equal in both objects?
        return false;
    if (b != other.b) // is the `b` field equal in both objects?
        return false;
    return true;      // ok, the objects are equal :)
}

答案 1 :(得分:1)

首先,你要调用等于函数而不是check函数。所以你可以改变它。或者您可以将检查更改为等于并覆盖对象等于。

 public static void main(String[] args) { 
         Test obj1=new Test(100, 22);
         Test obj2=new Test(100, 22);
         Test obj3=new Test(-1, -1);

         System.out.println(obj1.check(obj2));
         System.out.println(obj1.check(obj3)); 
    }

答案 2 :(得分:0)

您必须覆盖equals方法而不是check方法...对象类

上不存在检查方法

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

请注意:如果覆盖等于Java的规范,则需要覆盖hashCode方法。

您也可以使用自己的支票。