我不确定这个问题的措辞是否明确,但举个例子会更清楚。
我发现这在 Java 中不起作用:
int a = ...;
a = 5.0;
但这将:
int a = ...;
a += 5.0;
即,似乎 = 运算符是类型安全的,但 += 不是。这是否有任何深层原因,或者它只是语言设计者必须做出的另一个任意决定。
我不确定这个问题的措辞是否明确,但举个例子会更清楚。
我发现这在 Java 中不起作用:
int a = ...;
a = 5.0;
但这将:
int a = ...;
a += 5.0;
即,似乎 = 运算符是类型安全的,但 += 不是。这是否有任何深层原因,或者它只是语言设计者必须做出的另一个任意决定。
原因是数学运算做了一些隐式转换:
a += 5.0;
评估如下:
a = (int) ((double) a + 5.0);
然而,赋值需要显式转换。
(它可能是浮点数而不是双精度数,我不记得哪个 Java 将其视为十进制文字。)
让生活更轻松。
让我们再进一步。考虑:
byte b;
...
++b;
增量确实在做:
b = (byte)(1 + (int)b);
即使使用+=
它也不会变得更好:
b += b;
是:
b = (byte)((int)b+(int)b);
这将使这些运算符对字节/短/字符无用。
当然,除非我们有任意大小的整数,否则我不会高兴。