序文として、Mint 12x64でEclipse 3.7.2を使用しています
指定されたフィールドがあるとします。
tail = 10;
capacity = 10;
ここで、次のステートメントを実行するとします。
tail++ %= capacity;
なぜその発言は違法なのですか?発言があいまいですか?私には、次のような順序で評価されるようです。
- テール = モジュラス容量
- 末尾が 1 ずつ増加
序文として、Mint 12x64でEclipse 3.7.2を使用しています
指定されたフィールドがあるとします。
tail = 10;
capacity = 10;
ここで、次のステートメントを実行するとします。
tail++ %= capacity;
なぜその発言は違法なのですか?発言があいまいですか?私には、次のような順序で評価されるようです。
式の結果はtail++
、変数ではなく値です。JLS のセクション15.14.2から:
後置インクリメント式の結果は変数ではなく、値です。
値に代入することはできません。変数 (またはフィールド) にのみ代入できます。
サンプルがコンパイルされない理由tail++
は、変数ではなく値であるためです。演算子は変数を受け取り(それをインクリメントし)、値を返します。これを代入しようとします。変数にしか代入できないため、コンパイラ エラーが発生します。サンプルを機能させたい場合は、次を試すことができます。++
tail %= capacity;
tail++;