我发现java编译使用int和float有关于赋值和自赋值语句的非期望行为.
以下代码块说明了错误.
int i = 3;
float f = 0.1f;
i += f; // no compile error, but i = 3
i = i + f; // COMPILE ERROR
Run Code Online (Sandbox Code Playgroud)
在自我赋值中i += f
,编译不会发出错误,但是exaluation的结果是带有值的int 3
,并且变量i
保持该值3
.
在i = i + f
表达式中,编译器发出错误"错误:可能丢失精度"消息.
有人可以解释这种行为.
编辑:我已在https://compilr.com/cguedes/java-autoassignment-error/Program.java中发布此代码块