3

序文として、Mint 12x64でEclipse 3.7.2を使用しています

指定されたフィールドがあるとします。

tail = 10;
capacity = 10;

ここで、次のステートメントを実行するとします。

tail++ %= capacity;

なぜその発言は違法なのですか?発言があいまいですか?私には、次のような順序で評価されるようです。

  • テール = モジュラス容量
  • 末尾が 1 ずつ増加
4

2 に答える 2

6

式の結果はtail++、変数ではなくです。JLS のセクション15.14.2から:

後置インクリメント式の結果は変数ではなく、値です。

値に代入することはできません。変数 (またはフィールド) にのみ代入できます。

于 2013-03-27T16:46:51.773 に答える
5

サンプルがコンパイルされない理由tail++は、変数ではなくであるためです。演算子は変数を受け取り(それをインクリメントし)、を返します。これを代入しようとします。変数にしか代入できないため、コンパイラ エラーが発生します。サンプルを機能させたい場合は、次を試すことができます。++

tail %= capacity;
tail++;
于 2013-03-27T16:47:44.983 に答える