class Test {
int a, b;
Test(int a, int b) {
this.a = a;
this.b = b;
}
Test() {
a = 0;
b = 0;
}
void print() {
System.out.println("A=" + a + ", B=" + b);
}
void assign(Test ob) { //How can a class(Test) be passed as an argument in a method?
this.a = ob.a; //What does ob.a do?
this.b = ob.b; //What does ob.b do?
} //How can a object 'ob' be passed as an argument?
}
class TestDem {
public static void main(String ar[]) {
Test ob1 = new Test(1, 2);
System.out.println("1st object");
ob1.print();
Test ob2 = new Test();
System.out.println("2nd object");
ob2.print();
ob2.assign(ob1); //dont understand how this statement works with the 'assign' method
System.out.println("After assigning object 1 to object 2");
System.out.println("1st object");
ob1.print();
System.out.println("2nd object");
ob2.print();
}
}
输出
1st object
A=1, B=2
2nd object
A=0, B=0
After assigning object 1 to object 2
1st object
A=1, B=2
2nd object
A=1, B=2
答案 0 :(得分:1)
void assign(Test ob) {
this.a = ob.a;
this.b = ob.b; //What does ob.b do?
}
此方法类似于您使用的构造函数: -
public Test(int a, int b) {
this.a = a;
this.b = b;
}
a
和b
的值,而不是参数a和b本身.. 如何将类(Test)作为参数传递给方法?
我们未通过 类测试,而是将引用传递给对象类测试..
此方法除了创建该引用所指向的对象的副本(在本例中为ob)之外什么都不做。所以,在执行此方法之后,当前对象(由this
指向)将具有相同的value作为传递的对象..
ob.a做什么?
ob.a引用instance
变量a
作为类ob
的引用Test
,您已将其传递给此方法。
所以,如果你有: -
Test ob2 = new Test(1, 2);
Test ob1 = new Test();
ob1.assign(ob2);
然后执行此方法: -
由于this
是指当前引用,因此方法this
中的assign
将引用ob1
,因为我们正在调用此引用。
并且,您将在main方法中同时使用引用ob2
,并且ob
方法的参数中的assign
指向同一个对象。
所以, ob1.a(this.a)将等于 ob2.a ,并且
ob1.b(this.b)将等于 ob2.b
答案 1 :(得分:0)
void assign(Test ob) { //How can a class(Test) be passed as an argument in a method?
this.a = ob.a; //What does ob.a do?
this.b = ob.b; //What does ob.b do?
} //How can a object 'ob' be passed as an argument?
在Java中(除了像int这样的基本类型之外,我们不在这里讨论它们),所有内容都扩展了Object。
您定义了一个隐含地扩展Test
的班级Object
。
该类有两个成员变量:a
和b
,类型为int
。
如果ob
属于Test
类型,您可以使用ob.a
和ob.b
访问其成员(a
和b
是公开的)。您可以使用ob.a = anIntValue
和ob.b = anIntValue
设置其值。
这是您在assign
方法中执行的操作:您传递另一个Test
类型的对象,并将其值复制到您的封闭对象(this.a = value
,this.b = value
)中。
因此,您的方法的结果是通过复制外部对象的状态来修改内部状态。
答案 2 :(得分:0)
方法void assign(Test ob)
采用ob
类型的对象Test
。然后,它会将ob
' a
值的值分配给调用方法的类a
值,然后{ {1}}值。
也许如果方法重命名为b
,那么该方法的作用会更清楚吗?