我发现Java的编译没有关于使用int和一个浮动分配和自我赋值语句非预期的行为。
下面的代码块说明了错误。
int i = 3;
float f = 0.1f;
i += f; // no compile error, but i = 3
i = i + f; // COMPILE ERROR
在自赋值
i += f
编译不发出一个错误,但是exaluation的结果为具有值的int3
,并且变量i
维持的值3
。在
i = i + f
表达的编译器发出了“错误:可能的精度损失”的错误消息。
有人可以解释这种现象。
编辑:我已经张贴了这个代码块中https://compilr.com/cguedes/java-autoassignment-error/Program.java