java问题byte a=1,b=1;byte c=a+b;为啥错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java问题byte a=1,b=1;byte c=a+b;为啥错相关的知识,希望对你有一定的参考价值。

为什么会自动转化为int

你所问的这个问题叫“自动类型提升”

在java中,对char, byte和short类型的字符串进行数学算法操作,比如+,-,>>位移操作,都会引发
自动类型提升,结果将是int类型,a+b的结果是int, 要将int的值赋给byte就必须进行类型强制转换。

以下这句,是从think in java 3rd中摘出来的,希望对你有帮助。
In char, byte, and short, you can see the effect of promotion with the arithmetic operators. Each arithmetic operation on any of those types produces an int result, which must be explicitly cast back to the original type (a narrowing conversion that might lose information) to assign back to that type.

最后 关于类型的自动提升,java定义若干适用于表达式的类型提升规则:

第一,所有的byte型、short型和char型的值将被提升到int型;
第二,如果一个操作数是long型,计算结果就是long型;
第三,如果一个操作数是float型,计算结果就是float型;
第四,如果一个操作数是double型,计算结果就是double型。
参考技术A a+b产生的结果会自动转为int类型

所以需要进行一次强制类型转换

byte c=(byte)(a+b);
参考技术B 别人说的很明白了,我就不说了。

java问题,byte a=1,b=1;byte c=a+b;为啥错

我之前总结的有两种
1,错误提示是int转换为byte可能会丢失精度,可能是+号会提升两边的数据类型为int,大数据类型转小数据类型需要强转,并不能隐转,换句话说int以上所有数据类型支持这种写法,
例如double a=1;
double b=1;
double c=a+b;
解决这个问题可以这样bety c=(byte)(a+b);
2是byte 不支持这种写法,这个说法很牵强,我试过short也不能这样用
参考技术A byte的值的范围只有0和1(只是一位二进制数字),1+1=2,范围超出而出现溢出错误。 参考技术B byte a='1',b='1';byte c=a+b;

以上是关于java问题byte a=1,b=1;byte c=a+b;为啥错的主要内容,如果未能解决你的问题,请参考以下文章

java中byte[]转换成int

在java中,如何将byte转为string

golang bytes.Buffer Reset

java Object和byte数组互相转换中遇到的问题

两个byte[]拼接

java中byte转换int时为何与0xff进行与运算