int と float を使用した代入ステートメントと自己代入ステートメントに関して、Java コンパイルが予期しない動作をすることがわかりました。
次のコード ブロックは、エラーを示しています。
int i = 3;
float f = 0.1f;
i += f; // no compile error, but i = 3
i = i + f; // COMPILE ERROR
自己代入
i += f
では、コンパイルはエラーを発行しませんが、評価の結果は value を持つ int で3
あり、変数i
は value を維持します3
。i = i + f
式では、コンパイラは「エラー: 精度が失われる可能性があります」というメッセージとともにエラーを発行します。
誰かがこの動作を説明できますか?
編集: このコード ブロックをhttps://compilr.com/cguedes/java-autoassignment-error/Program.javaに投稿しました。