我不确定问题的措辞是否清楚,但一个例子会更清晰。为什么不是运算符类型在java中安全的?
我发现不会在Java中工作:
int a = ...;
a = 5.0;
但这会:
int a = ...;
a += 5.0;
即,似乎=运算符是类型安全的,但+ =不是。 有没有什么深层原因,或者它只是另一个武断的决策语言设计师必须采取的。
我不确定问题的措辞是否清楚,但一个例子会更清晰。为什么不是运算符类型在java中安全的?
我发现不会在Java中工作:
int a = ...;
a = 5.0;
但这会:
int a = ...;
a += 5.0;
即,似乎=运算符是类型安全的,但+ =不是。 有没有什么深层原因,或者它只是另一个武断的决策语言设计师必须采取的。
为了使生活更轻松。
让我们走得更远一点。试想一下:
byte b;
...
++b;
增量真的做得:
b = (byte)(1 + (int)b);
即使使用+=
它不会得到任何好转:
b += b;
是:
b = (byte)((int)b+(int)b);
那会使这些运营商使用字节/短/字符。
当然,我不会高兴,直到我们有任意大小的整数。
的原因是,数学运算做一些隐式转换:
a += 5.0;
如下评价:
a = (int) ((double) a + 5.0);
分配,但是,需要明确的强制转换。
(这可能是漂浮而不是双,我不记得哪个Java把十进制文本。)
但它为什么最终转换回int? – 2009-02-26 15:07:26