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

Need help explaining a concept to students

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

int j = 0;
j = j + 4.0;

但是这段代码没有:

int j = 0
j += 4.0;

对我来说,这些是一回事。我搜索了一些 posting 来回答这个问题,但找不到任何答案。如果您有 link 到 post 来解释这个问题,我和我的学生将不胜感激。谢谢!

那是因为表达式:

j += 4.0;

相当于:

j = (int) (j + 4.0);

检查JLS § 15.16.2

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

j+=4.0

相同
j = j + (int)4.0

所以在这种情况下,编译器会自动为您添加转换。在第一个示例中,它没有。

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

j = (int)(j + 4.0);

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