5

重複の可能性:
Java - 操作の順序 - 1 行で 2 つの代入演算子を使用する

次のように変数にチェーンの値を代入すると、

int x=10, y=15;
int z=x=y;

System.out.println(x+" : "+y+" : "+z);

次に、3 つの変数すべての値が になりxyzなり15ます。


ただし、配列で次の現象がわかりません。

int array[]={10, 20, 30, 40, 50};
int i = 4;

array[i] = i = 0;    
System.out.println(array[0]+" : "+array[1]+" : "+array[2]+" : "+array[3]+" : "+array[4]);

を出力します10 : 20 : 30 : 40 : 0array[4]である最後の要素の値を置き換えます0

前の割り当てステートメント - に関してint z=x=y;、最初の要素の値がarray[0]に置き換えられることを期待しています0。そうでないのはなぜですか?単純だけど思いつかない。説明していただけますか?


ちなみに、この割り当てステートメントarray[i] = i = 0;はダミーであり、このコードでは独自の値を持たないため、使用しないでください。この場合、実際にどのように機能するかを知りたかっただけです。

4

4 に答える 4

7

int i = 4;i が 4 にarray[i]等しい場合、に等しいarray[4]soarray[i] = i = 0;はに等しくなりarray[4] = i = 0;ます。つまり、インデックス 4 の値を 0 に変更する方法です。

于 2012-10-29T06:31:36.617 に答える
7

区切り文字 [] と () の優先順位が変わります。これらのセパレーター内のすべては、Java がセパレーターの外を見る前に計算されます。

array[i] = i = 0;

コンパイラ段階で、この行への最初の変更は次のように行われます。

array[4] = i = 0; // subscript separator is evaluated first.

現在、代入操作は右結合です。したがって、iに値が割り当てられ0、次に array[4] にiieの値が割り当てられます0

次のリンクを確認してください。

于 2012-10-29T06:42:27.067 に答える
3

ぶっ壊そう……。

あなたの声明:

int array[]={10, 20, 30, 40, 50};

実装:

array[0] => 10

array[1] => 20

array[2] => 30

array[3] => 40

array[4] => 50

あなたの声明:

int i = 4;

実装:

i => 4

あなたの声明:

array[i] = i = 0;

実装:

array[4] = i = 0;

array[4] = 0

必要に応じてarray[0] => 0、これを実行してください...

int i = 0;

array[i] = i = 0
于 2012-10-29T06:47:19.280 に答える
2

array[i]割り当て操作の前に評価されるため

于 2012-10-29T06:34:09.613 に答える