分配给变量时精度损失

时间:2011-02-28 03:46:10

标签: java

我对分配或转换为正确的数据类型有疑问。

byte a=3;   //compiled
byte b=5;   //compiled
byte c=a+b; //not compiled and reporting as possible loss of precision.

这里前两个语句正在编译,即使我们正在将int literal赋值给byte。但是我的第三个语句与上面的相同,而且a + b的值也在byte的范围内。为什么会这样错误?

3 个答案:

答案 0 :(得分:2)

当您对两个字节执行+操作时,它们会隐式转换为int,因此结果也是int。因此,你需要另一个演员。

(第一个语句中的文字作业与它无关。)

答案 1 :(得分:2)

一般规则是你不能使用赋值将整数缩小到一个字节,因为这是一个不安全的缩小转换(大多数ints 适合一个字节)。具体来说,允许的assignment conversions都不会缩小。

但是,这种情况专门有一个exception

  

缩小的原始转换可能   如果变量的类型是,则使用   byte,short或char,以及的值   常量表达式是   可代表的类型   变量

这适用于ab。两个变量的类型都是byte,两个常量表达式的值明显适合一个字节。

答案 2 :(得分:0)

我认为添加执行binary numeric promotion,因此a和b在第三个语句中被提升为int。