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;
}
  • 違いは、このメソッドでは、パラメーター a と b 自体ではなく、渡された参照の値aと参照から値を取得していることです。b
  • また、コンストラクタではないことにも注意してください。渡された参照の値を現在のオブジェクトに割り当てるだけです。一方、コンストラクタは作成後にインスタンスの状態を初期化します。

クラス(Test)をメソッドの引数として渡すにはどうすればよいですか?

ここでクラス 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は現在の参照を参照するため、この参照を呼び出しているため、inthisメソッドassignは を参照します。ob1

ob2そして、メインメソッドと同じオブジェクトを指すメソッド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。このクラスには と の 2 つのメンバー変数がaありb、タイプはintです。

obがタイプの場合、 andTestを使用してそのメンバーにアクセスできます(およびは公開されています)。また、 と を使用して値を設定できます。ob.aob.babob.a = anIntValueob.b = anIntValue

それがassignメソッドで行うことです: type の別のオブジェクトを渡しTest、その値を囲んでいるオブジェクト ( this.a = value, this.b = value) にコピーします。

したがって、メソッドの結果は、外部オブジェクトの状態をコピーして内部状態を変更することです。

于 2012-10-09T12:16:25.830 に答える
0

このメソッドは、タイプvoid assign(Test ob)のオブジェクトを受け取ります。次に、 の value の値を、メソッドが呼び出されているクラスのvalueに割り当ててから、値についても同じように割り当てます。obTestobaab

おそらく、メソッドの名前が変更された場合、メソッドcopy(Test ob)の機能がより明確になるでしょうか?

于 2012-10-09T12:19:34.220 に答える