0
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
4

3 回答 3

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;
}
  • 不同之处在于,在此方法中,您获取的是传递的引用的值ab来自传递的引用,而不是参数 a 和 b 本身。
  • 另请注意,它不是构造函数。它只是将传递的引用的值分配给当前对象。而构造函数在创建实例后初始化实例的状态。

如何将类(测试)作为方法中的参数传递?

我们没有在这里传递Test,而是传递对 Test.. 类对象的引用

该方法除了创建该引用指向的对象的副本(在本例中为 ob)之外什么也不做。因此,在此方法执行后,当前对象(由 指向this)将具有与传递的对象相同的值。

ob.a 是做什么的?

ob.a 是指您传递给此方法的 class引用的instance变量..aobTest

所以,如果你有: -

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

于 2012-10-09T12:08:02.243 回答
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。这个类有两个成员变量:ab,它们的类型是int

如果ob是 type ,您可以使用andTest访问它的成员(as and are public)。您可以使用和设置它们的值。ob.aob.babob.a = anIntValueob.b = anIntValue

这就是您在assign方法中所做的:您传递另一个类型的对象Test并将其值复制到您的封闭对象 ( this.a = value, this.b = value) 中。

因此,您的方法的结果是通过复制外部对象的状态来修改您的内部状态。

于 2012-10-09T12:16:25.830 回答
0

该方法void assign(Test ob)接受一个ob类型为 的对象Test。然后它将ob's 的a值分配给正在调用该方法的类的a值,然后对这些b值进行相同的处理。

也许如果该方法被重命名copy(Test ob),那么该方法的作用会更清楚吗?

于 2012-10-09T12:19:34.220 回答