0

これは Java コードのスニペットです。

class Test{  
    public static void main(String[ ] args){
        int[] a = { 1, 2, 3, 4 };       
        int[] b = { 2, 3, 1, 0 };     
        System.out.println( a [ (a = b)[3] ] );  
    }
}

なぜ1を出力するのですか?これは宿題ではありません!Javaを理解しようとしています。これは、OCA Java 7 試験に関連しています。

4

2 に答える 2

4

を参照した時点ではa[ ... ]aまだ最初の配列を指しています。インデックス自体が評価されると、btoの代入がありaます。したがって、その時点で は にaなりb、そのうちの 3 番目のアイテムが取得されます。これは0です。

これ0は、以前に見つかった配列のインデックスとして使用されます。aこれは指している配列ですが、aその間にそれ自体が変更されています。そのため、1期待するかもしれませんが、 が出力されます2

それがこの例で示そうとしていることだと思います。配列参照はすでに評価されており、インデックスの評価中に配列変数を変更しても変更されません。

しかし、私はこの「機能」を本番コードでは使用しません。非常に不明確です。

于 2012-11-10T16:31:43.127 に答える
3
System.out.println( a [ (a = b)[3] ] );

まず、 の値aが評価されます ( {1, 2, 3, 4})。次にa = b実行されます。bこれは の値をに代入し、 の値もa返しますbb[3] = { 2, 3, 1, 0 }0、そう、最終的には、。{1,2,3,4}[b[3]] = {1,2,3,4}[0] = 1


これを確認するには、次のことを考慮してください。

public static void main(String[] args) throws FileNotFoundException {
    int[] a = { 1, 2, 3, 4 };            
    System.out.println( a() [ (a = b())[c()] ] );
}

public static int[] a() {
    System.out.println('a');
    return new int[]{ 1, 2, 3, 4 };
}

public static int[] b() {
    System.out.println('b');
    return new int[]{ 2, 3, 1, 0 };
}

public static int c() {
    System.out.println('c');
    return 3;
}

出力:

a
b
c
1
于 2012-11-10T16:24:23.287 に答える