请帮我理解以下代码中的'assign'方法

时间:2012-10-09 12:04:54

标签: java oop

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

3 个答案:

答案 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;
}
  • 区别在于,在此方法中,您从传递的引用中获取ab的值,而不是参数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。 该类有两个成员变量:ab,类型为int

如果ob属于Test类型,您可以使用ob.aob.b访问其成员(ab是公开的)。您可以使用ob.a = anIntValueob.b = anIntValue设置其值。

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

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

答案 2 :(得分:0)

方法void assign(Test ob)采用ob类型的对象Test。然后,它会将ob' a值的值分配给调用方法的类a值,然后{ {1}}值。

也许如果方法重命名为b,那么该方法的作用会更清楚吗?