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
最佳答案
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 本身.. - 另请注意,它不是构造函数。它只是将传递的引用的值分配给当前对象。而构造函数在创建实例后初始化实例的状态。
How can a class(Test) be passed as an argument in a method?
我们在这里没有通过类测试,相反,我们正在传递对对象的引用测试类..
该方法除了创建该引用所指向的对象的副本(在本例中为 ob)之外什么也不做。因此,在该方法执行后,当前对象(由 this
指向)将具有与传递的对象..
What does ob.a do?
ob.a 指的是instance
变量a
供引用ob
类Test
,您传递到此方法中..
所以,如果你有:-
Test ob2 = new Test(1, 2);
Test ob1 = new Test();
ob1.assign(ob2);
那么当这个方法执行时:-
自 this
指的是当前引用,所以this
在方法assign
中将引用ob1
,因为我们正在调用此引用..
并且,您将获得引用号 ob2
在 main 方法中,和 ob
在assign
的参数中指向同一个对象的方法..
因此,ob1.a(this.a) 将等于 ob2.a,并且
ob1.b(this.b) 将等于 ob2.b
关于java - 请帮我理解以下代码中的 'assign'方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799635/