2009-02-26 64 views
3

我不确定问题的措辞是否清楚,但一个例子会更清晰。为什么不是运算符类型在java中安全的?

我发现不会在Java中工作:

int a = ...; 
a = 5.0; 

但这会:

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

即,似乎=运算符是类型安全的,但+ =不是。 有没有什么深层原因,或者它只是另一个武断的决策语言设计师必须采取的。

回答

1

为了使生活更轻松。

让我们走得更远一点。试想一下:

byte b; 
... 
++b; 

增量真的做得:

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

即使使用+=它不会得到任何好转:

b += b; 

是:

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

那会使这些运营商使用字节/短/字符。

当然,我不会高兴,直到我们有任意大小的整数。

5

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

a += 5.0;如下评价:

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

分配,但是,需要明确的强制转换。

(这可能是漂浮而不是双,我不记得哪个Java把十进制文本。)

+0

但它为什么最终转换回int? – 2009-02-26 15:07:26

相关问题