2012-12-08 435 views
9

我发现java编译具有关于使用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编译不会发出一个错误,但exaluation的结果与价值3一个int,变量i保持价值3

  • i = i + f表达式编译器将发出错误与“错误:可能的精度损失”消息。

有人可以解释这种行为。

编辑:我已经张贴了这个代码块中https://compilr.com/cguedes/java-autoassignment-error/Program.java

+0

完成。您可以在Java Language Specification中找到解释。它免费在线提供。 –

+0

为了公平起见,“第5章转换和促销”是我在这个问题陷入困境之前所看到的,第15章甚至不会在第一页上显示寻找“Java隐式缩小转换”。没有找到信息不一定是不搜索的迹象,你的评论没有任何帮助 –

回答