2017-05-30 10 views
0

Javaに問題があります。 c.duplicateが実行されたとき6,12,12Java - 別のオブジェクトと等しいオブジェクトの振る舞い

私はいくつかのテストを行っていると私はBことが見ていると12の値を取るC:

class Nmb { 

private int value ; 

public Nmb (int value) { 
    this.value = value ; 
} 

public Nmb (Nmb number) { 
    value = number.value ; 
} 

public void duplicate () { 
    value = 2*value ; 
} 

public String toString () { 
    return "" + value ; 

} 
public static void main (String [ ] args) { 
    Nmb a = new Nmb (3) ; 
    Nmb b = new Nmb (a) ; 
    Nmb c = b ; 
    a.duplicate () ; 
    b.duplicate(); 
    c.duplicate(); 
    System.out.println (a + "," + b + ","+ c) ; 

} 
} 

出力は次のようになります。これは、コードであります。なぜこれが起こるのですか?なぜc.duplicateがオブジェクトbを呼び出すのですか?そのオブジェクトが作成されたときにb(3)の値を持つべきではなく、6,6,6の結果で重複したメソッドが呼び出されたときに3で動作しますか?オブジェクトcは常にオブジェクトbに接続され、値1は常に他の値に依存しますか?

cbと同じオブジェクトへの参照であるので、これらは両方とも参照している同じオブジェクトにポイントというためです

+1

'B'と 'C'は、二つの等しいオブジェクトではありません。それらは同じオブジェクトです。それは 'c = b'のことです。 – khelwood

+0

はCと同じリファレンスをBと指していませんか? –

+0

変数をオブジェクトに配置できるラベルと考えてください。同じオブジェクトに 'b'と' c'の両方のラベルを付けたので、常に同じ値を表示することは驚きではありません。 – biziclop

答えて

1

ありがとうございます。ここで

あなたは(つまり、あなたが実際に参照ではなく、新しいオブジェクトを作成)cbを割り当てる:

Nmb c = b ; 

ので、c.duplicate()bcの両方で動作しますexecutuing。

はそれがより明確にする:

     ______________ 
    b (reference) -> |    | 
        | Num object | 
    c (reference) -> |______________| 
+1

技術的には、 'c'は' b'への参照ではありません。 'c'は' b'が参照しているのと同じオブジェクトへの参照です。両方で参照されるオブジェクトには「名前」がありません。記述が難しいので、あなたが言っていることは問題ありませんが、技術的には間違っています。 – Andreas

関連する問題