3

我不确定这个问题的措辞是否明确,但举个例子会更清楚。

我发现这在 Java 中不起作用:

int a = ...;
a = 5.0;

但这将:

int a = ...;
a += 5.0;

即,似乎 = 运算符是类型安全的,但 += 不是。这是否有任何深层原因,或者它只是语言设计者必须做出的另一个任意决定。

4

2 回答 2

5

原因是数学运算做了一些隐式转换:

a += 5.0;评估如下:

a = (int) ((double) a + 5.0);

然而,赋值需要显式转换。

(它可能是浮点数而不是双精度数,我不记得哪个 Java 将其视为十进制文字。)

于 2009-02-26T15:02:52.647 回答
1

让生活更轻松。

让我们再进一步。考虑:

byte b;
...
++b;

增量确实在做:

b = (byte)(1 + (int)b);

即使使用+=它也不会变得更好:

b += b;

是:

b = (byte)((int)b+(int)b);

这将使这些运算符对字节/短/字符无用。

当然,除非我们有任意大小的整数,否则我不会高兴。

于 2009-02-26T15:13:55.990 回答