需要帮助向学生解释一个概念

时间:2015-03-12 12:55:16

标签: java compiler-errors

我教授计算机科学AP,我们使用java来教授编程概念。我的学生和我注意到的一件事是下面的代码给出了精度损失错误:

int j = 0;
j = j + 4.0;

但是这段代码没有:

int j = 0
j += 4.0;

对我来说,这些都是一回事。我已经搜索过一些帖子来回答这个问题,但找不到任何内容如果你有一个链接到一个解释这个的帖子,我的学生和我会很感激。谢谢!

3 个答案:

答案 0 :(得分:1)

那是因为表达式:

j += 4.0;

相当于:

j = (int) (j + 4.0);

检查JLS § 15.16.2

  

形式E1 op = E2的复合赋值表达式是等价的   到E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1   仅评估一次。

答案 1 :(得分:1)

这是因为+=Compound Assignment Operator,这使得隐式转换不需要抛出错误。如果没有它,您将添加两种不同的原始数据类型,而不需要任何隐式或显式转换。基本上,+=技术相当于:

j = (int)(j + 4.0);

This question可以向您和您的学生进一步解释+=运算符。

答案 2 :(得分:0)

j+=4.0

相同
j = j + (int)4.0

因此编译器会在这种情况下自动为您添加演员表。在第一个例子中,它没有。