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

标签 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

最佳答案

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供引用obTest ,您传递到此方法中..

所以,如果你有:-

Test ob2 = new Test(1, 2);
Test ob1 = new Test();
ob1.assign(ob2);

那么当这个方法执行时:-

this指的是当前引用,所以this在方法assign中将引用ob1 ,因为我们正在调用此引用..

并且,您将获得引用号 ob2在 main 方法中,和 obassign的参数中指向同一个对象的方法..

因此,ob1.a(this.a) 将等于 ob2.a,并且
ob1.b(this.b) 将等于 ob2.b

关于java - 请帮我理解以下代码中的 'assign'方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799635/

相关文章:

c++ - 再次初始化一个变量

matlab - 在matlab中为对象动态添加一个字段

java - 在 memcached 之前使用 ehcache

java - 转换器类测试驱动

java - Spring @Transactional(readOnly=true) 恢复属性?

Java SQL Derby Getconnection非法修饰符

oop - 有什么组合不能实现继承可以吗?

java - 阶段中的 LibGDX Actor 未收到点击事件

ios - 在 Objective-C 中如何从父类(super class)中引用子类的 View ?

python - 在Python中将字典转换为以键作为对象名称的对象