public class Test
{
public static void main(String[] args) {
int i = 10;
i = i++;
System.out.println("value of i is : " + i);
}
}
出力は次のとおりです。10
で同様のコードを実行するとC
、出力は11
.
Java と C は異なるルールを持つ異なる言語です。C では、式が評価され、副作用が適用される正確な順序は規定されていません。のような式の場合、代入が行われる前に演算子i = i++
の副作用が適用されるという保証はありません。++
結果は、プラットフォーム、最適化設定、さらには周囲のコードによって異なります。動作は未定義です。コンパイラは、予期しない結果を生成することを含め、適切と思われる方法で状況を処理できます。
Java の OTOH では、厳密な評価順序が指定されており、副作用がすぐに適用されるため、式は明確に定義されています。
Java では、i = i++;
post ++ はそのステップの後に値を増やします。しかし、ここで に割り当てた時点ではi++
、i
まだi
そう10
です10
。しかし C では、これは Java とは異なる場合があります。コードで使用するi=++i
とJava
、次のようになります11.