2011-12-15 14 views
5

次のコードスニペットをJavaで検討してください。私は、次のコードスニペットの文temp[index] = index = 0;がかなり受け入れられないことを知っていますが、状況によっては必要な場合があり、したがって知る必要があります。Javaでの配列の割り当て

package arraypkg; 

final public class Main 
{ 
    public static void main(String... args) 
    { 
     int[]temp=new int[]{4,3,2,1}; 
     int index = 1; 

     temp[index] = index = 0; 
     System.out.println("temp[0] = "+temp[0]); 
     System.out.println("temp[1] = "+temp[1]); 
    } 
} 

これは、コンソール上に次の出力が表示されます。

temp[0] = 4 
temp[1] = 0 

私はこの文temp[index] = index = 0;を理解していません。 temp[1]にはどのように0が含まれていますか?この割り当てはどのように行われますか?

+0

あなたは 'temp [1]'とは何でしょうか? –

+0

私は、最初の要素だけが変更されるように 'temp [index]'を 'temp [0]'に等しくする '' 0''を ''索引 ' –

+4

こちらのメッセージは、このようにコードを書き込まないでください。 Javaの厄介なことを知ることは、尊敬できるスキルですが、ほとんど役に立たないことです。このようなコードは存在してはならず、見つかった場所はすぐに根絶されるべきです。 – rfeak

答えて

8

割り当ては(temp[index] = (index = 0))、右結合です。

しかし、最初に式temp[index]がLHS変数に対して評価されます。その時点でindexはまだ1です。次に、RHS(index = 0)が実行されます。

+1

+1 - OPが実際に求めている質問に直接対処する最初の人(評価のLHS対RHSの順序について)。 –

+1

証拠のサポート:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.1 –

1

あなたのステートメントに0が割り当てられています。ステートメントtemp [index] = index = 0は、インデックスANDとtemp [index]に0を書き込みました。それが意味するものです。代入演算子0

1

の左側にあるすべての変数を作るもの、その行がないことtemp[index]indexindexに等しくなければならないと言うことである値0が割り当てられます。

これは、この構文がほとんど受け入れられない理由です。読むのが難しく、ほとんどの人がそれを理解していません。

1

temp [1]とインデックスを '0'に割り当てました。 左から右に実行しています。 と思ったら[temp/* * /]