我对分配或转换为正确的数据类型有疑问。
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的范围内。为什么会这样错误?
答案 0 :(得分:2)
当您对两个字节执行+
操作时,它们会隐式转换为int
,因此结果也是int
。因此,你需要另一个演员。
(第一个语句中的文字作业与它无关。)
答案 1 :(得分:2)
一般规则是你不能使用赋值将整数缩小到一个字节,因为这是一个不安全的缩小转换(大多数ints 不适合一个字节)。具体来说,允许的assignment conversions都不会缩小。
但是,这种情况专门有一个exception:
缩小的原始转换可能 如果变量的类型是,则使用 byte,short或char,以及的值 常量表达式是 可代表的类型 变量
这适用于a
和b
。两个变量的类型都是byte
,两个常量表达式的值明显适合一个字节。
答案 2 :(得分:0)
我认为添加执行binary numeric promotion,因此a和b在第三个语句中被提升为int。