我教授计算机科学AP,我们使用java来教授编程概念。我的学生和我注意到的一件事是下面的代码给出了精度损失错误:
int j = 0;
j = j + 4.0;
但是这段代码没有:
int j = 0
j += 4.0;
对我来说,这些都是一回事。我已经搜索过一些帖子来回答这个问题,但找不到任何内容如果你有一个链接到一个解释这个的帖子,我的学生和我会很感激。谢谢!
答案 0 :(得分:1)
那是因为表达式:
j += 4.0;
相当于:
j = (int) (j + 4.0);
形式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
因此编译器会在这种情况下自动为您添加演员表。在第一个例子中,它没有。