αλεχολυτ Asked:2020-10-02 20:38:10 +0000 UTC2020-10-02 20:38:10 +0000 UTC 2020-10-02 20:38:10 +0000 UTC 将一个整数递增一个实数零 772 有以下代码: int i = 2020202048; i += 0.0f; System.out.println(i); 输出: 2020201984 为什么? java 1 个回答 Voted Best Answer αλεχολυτ 2020-10-02T23:40:38Z2020-10-02T23:40:38Z 问题出在复合赋值运算符+=上。根据文档,原始表达式i += 0.0f;扩展为i = (int)(i + 0.0f);. 括号内的表达式将是 类型float,其中原始数字2020202048没有精确表示,因此更改为2020201984.0f,然后转换回int。 问题中代码的非显而易见性主要是由于隐式转换int→ float→ int(在问题的评论中已经提到),当+=与不同类型的参数一起使用时会发生这种情况。
问题出在复合赋值运算符
+=上。根据文档,原始表达式i += 0.0f;扩展为i = (int)(i + 0.0f);. 括号内的表达式将是 类型float,其中原始数字2020202048没有精确表示,因此更改为2020201984.0f,然后转换回int。问题中代码的非显而易见性主要是由于隐式转换
int→float→int(在问题的评论中已经提到),当+=与不同类型的参数一起使用时会发生这种情况。