需要帮助向学生解释一个概念
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);
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 可能会向您和您的学生进一步解释 +=
运算符。
我教授计算机科学 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);
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 可能会向您和您的学生进一步解释 +=
运算符。