在java

时间:2017-02-21 12:38:26

标签: java oop

class Test {

int a, b;

Test (int i,int j) 
{
    a=i;
    b=j;
    System.out.println("a is " + a);
}
boolean equalto(Test o)
{

if (o.a == a && o.b == b )
    return true;
else return false;

}
     }

class PassObj {

public static void main(String[] args) {

    Test ob2 = new Test(100,22);
    Test ob3 = new Test(-1 ,-1);
    Test ob1 = new Test(100 ,22) ;

System.out.println(ob1.equalto(ob2));
System.out.println(ob1.equalto(ob3));



}
    }

在上面的代码中,我可以知道条件是否有效。 对于if语句中的第一个打印语句,ob2.a与" a"即100 == a

我怀疑是什么是" a"它需要比较和如何?我试图打印那个" a"执行print语句之前的值,我理解当创建对象并启动" a"被打印为100,-1和100。

ob1.equalto(ob2)是否再次调用构造函数?如果是这样,那么在我的输出中不应该" a" a"再次打印。我是OOP的新手,并不清楚这个概念。

我的疑问是" a"在比较打印报表1和2时需要它,如何只打印那些2" a"

输出我现在开始:

a is 100
a is -1
a is 100
true
false

2 个答案:

答案 0 :(得分:1)

我真的不知道你要问的是什么,但我会尝试解释一些OOP概念,希望你能得到它。

在这里,您创建了三个对象:

Test ob2 = new Test(100,22);
Test ob3 = new Test(-1 ,-1);
Test ob1 = new Test(100 ,22);

执行代码后,构造函数被调用三次。因此,创建了三个对象。 ob1ob2ob3就像您给他们的标签一样,以便您可以确定以后的标签。请注意,这三个对象完全独立。此处的每个对象都包含ab

现在这一行:

System.out.println(ob1.equalto(ob2));

您可以在equalto上使用ob1参数调用ob2。让我们来看看方法内部会发生什么。我认为这部分是你最困惑的地方。

if (o.a == a && o.b == b )
    return true;
else return false;

}

由于您已将ob2作为参数传递,o此处基本上代表ob2。但是a右侧的==是什么?这个a实际上是this.a的缩写。 this表示调用该方法的对象,在本例中为ob1。如果您想了解更多信息,请查看this

所以你在这里比较ob1.aob2.a。下一行也会发生同样的事情。

答案 1 :(得分:0)

当你创建一个对象时会调用Construtor,就像你在编写Test ob2 = new Test(100,22);时创建对象并调用Contructor一样。

根据您的要求,您必须按照以下方式在equalto方法内打印:

boolean equalto(Test o)
{

    //if you use System.out.println(ob1.equalto(ob2)); then this.a will print ob1 'a' value 
    //and o.a will print ob2 'a' value
    System.out.println(this.a+"  "+o.a); //this.a 
    if (o.a == a && o.b == b )
        return true;
    else 
    return false;
}