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
答案 0 :(得分:1)
我真的不知道你要问的是什么,但我会尝试解释一些OOP概念,希望你能得到它。
在这里,您创建了三个对象:
Test ob2 = new Test(100,22);
Test ob3 = new Test(-1 ,-1);
Test ob1 = new Test(100 ,22);
执行代码后,构造函数被调用三次。因此,创建了三个对象。 ob1
,ob2
,ob3
就像您给他们的标签一样,以便您可以确定以后的标签。请注意,这三个对象完全独立。此处的每个对象都包含a
和b
。
现在这一行:
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.a
和ob2.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;
}