ちょっとした Java パズルを作りたかったのですが、戸惑いました。パズルの一部は次のとおりです。
次のコードは何をしますか:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
を出力します9
。
私の(少なくとも部分的に)間違った説明:
よくわかりませんが、後の項は次のi +=
ように評価されると思います。
そう
int i = 1;
i += ++i + i++ + ++i;
と同じです
int i = 1;
i += ((++i) + (i++)) + (++i);
これは左から右に評価されます (事前および事後増分 Java 評価を参照)。
最初は に++i
インクリメントi
して2
を返します2
。だからあなたは持っています:
i = 2;
i += (2 + (i++)) + (++i);
はの新しい値であるため、 をi++
返し、次のようにインクリメントします。2
i
i
3
i = 3;
i += (2 + 2) + ++i;
2 番目は に++i
インクリメントi
し、次の値を4
返します4
。
i = 4;
i += (2 + 2) + 4;
したがって12
、 ではなく になり9
ます。
私の説明のどこに誤りがありますか? 正しい説明は何でしょう?