Java中byte和short类型向加减问题
public class Test {
public static void main(String[] args) {
short b1 = 1,b2 =2,b3,b6,b8;
final byte b4 = 4,b5 = 6,b7;
int b;
//b3 = (b1 + b2);//编译出错
b3 = (byte)(b1 + b2);
b3 = (b4+b5);
//b3 = (b4+b1);//编译出错
//b7 = 128;//编译出错
b = (b1 + b2);
}
}
1.b3 = (b1 + b2); 会报错,因为byte类型再相加的时候,会自动转换成int类型,右边的int类型赋值给byte类型便会报错,加上强制类型转换可以通过编译。比如b = (byte)(b1+b2);
2.b3 = (b4+b5); final修饰的为常量,所以编译前会检查两个常量的和是否越界。
3.b3 = (b4+b1); 编译报错,byte类型和常量相加的时候,因为不知道结果会不会溢出,于是会先转化为int类型再进行运算,所以在这条语句中 b + 1 实际上是int类型,所以不能复制给byte。
4.b7 = 128; 会报错,因为右边超过了byte的存储范围,强制类型转换 b = (byte)128;可以通过编译,但是会造成数据丢失。 只要赋予byte的值不超过byte的取值范围,系统都会自动帮你转换,效果和byte test = (byte) 127一样; 当赋予的值超过了byte类型的取值范围,那就要手动进行数据类型转换了,不然系统程序就报错了
5.b++; 不会报错,b++ 等价于 b = (byte)(b+1) ,因为底层会自动进行强制类型转换。
short类型和byte类型的运行结果一样。
