byte b1 = 1, b2 = 2;//right,这不是将一个int类型的数据赋给一个byte的变量吗?
byte b3 = b1 + b2;//error!,已知,在做加法运算的时候。类型自动提升为int型
qustion:为何第一句可以,第二句不能通过编译?
byte b3 = (byte) (b1 + b2); 强制转换一下即可,byte与byte相加,会转int型,而你定义的byte b3接收,所以得强制转换。
你试试 byte b1 = 128; 是不是也同样报错? b1+b2的值,只有在程序运行的时候才知道,假如超出了byte的范围呢?
为了保证程序的正确运行,这里编译器肯定会提示报错的。
byte类型的范围是:占一个字节,一个字节占8位 所以范围是2的8次幂:即-128~+127,如果你上面定义的两个变量的byte值在这个范围内是正确的,但是如果参与运算的话 他们都会先转换成int在进行计算,计算之后是一个int类型,就不能在用byte接收
前面的前辈说的都对,我也刚学。交流一下。前面正确是因为只是赋值操作。第一把1赋值给为byte类型的b1,第二是把2赋值给b2,默认为int类型。后面默认提升byte b1为int类型与b2相加。值是int类型,赋值给一个byte类型的b3是不行的,需要强制转换。所以错误。