0

私が得る出力は 9 12 1 11 12 ですが、9 9 1 12 12 である必要があります。a2 = a1; と関係があることはわかっています。しかし、方法がわかりません。

public class C {

   /**
    * @param args the command line arguments
    */ 
    private int i;
    private int k = 10;

    public static void main(String[] args) {
    // TODO code application logic here

       C a2 = new C();
       C a1 = new C();
       C a3 = new C();

       a1.i = a3.i;
       a2 = a1; 
       a2.i = 12;
       a3.i = a3.i + 1;
       a1.i = 9;
       a1.k = 11;
       a2.k = 12;
       System.out.println(a1.i + " " + a2.i + " " + a3.i + " " + a1.k + " " + a2.k);
    }
}
4

3 に答える 3

1
C a2 = new C();
C a1 = new C();
C a3 = new C();

a1.i = a3.i; // => a3.i = 0 then a1.i = 0;
a2 = a1; // => a1 and a2 are the same objects (point to the same references)
a2.i = 12; //=> a2.i = 12, so a1.i = 12
a3.i = a3.i + 1;// => a3.i = 1
a1.i = 9; // => a1.i = 9 so a2.i = 9
a1.k = 11; // => a1.k = 11 so a2.k = 11
a2.k = 12; // => a2.k = 12 so a1.k = 12
//a1.i = 9 / a2.i = 9 / a3.i = 1 / a1.k = 12 / a2.k = 12
System.out.println(a1.i + " " + a2.i + " " + a3.i + " " + a1.k + " " + a2.k);
于 2013-10-20T13:57:03.633 に答える
0

たぶん、いくつかのコメントが何が起こっているのかを理解するのに役立つでしょう:

a1.i = a3.i; // a3.i = 0 = a1.i
a2 = a1;  // now the old object a2 is lost and a2 points to a1
a2.i = 12; // a2.i = 12 = a1.i
a3.i = a3.i + 1; // a3.1 = 0 + 1
a1.i = 9; // a1.i = 9 = a2.i
a1.k = 11; // a1.k = 11 = a2.k
a2.k = 12; // a2.k = 12 = a1.k

実行の最後には、次のようになります。

a1.i = 9
a2.i = 9
a3.i = 1
a1.k = 12
a2.k = 12
于 2013-10-20T13:59:54.613 に答える
0

このコード:a2=a1は、参照a2が と同じオブジェクトを指すことを意味しますa1

したがって、同じオブジェクトを指す 2 つの参照があります。オブジェクトが変更された場合、どちらの参照を使用しても同じ値が得られます。

また。プログラムを実行すると、正しい値が得られます: 9 9 1 12 12.

于 2013-10-20T13:57:47.553 に答える