例子一:
① byte a=1; //通过
当字面整数常量保存到byte、short、long 或char类型的变量中时,Jdk会执行自动类型转换,概括说就是整型值赋值的时候可以自动转换
② byte b=a+1; //编译报错
1默认是 int 类型,而 a 和 b是 byte类型,在运算的时候 a会自动转换为 int 类型与1相加,而结果会变成 int 类型,这个时候大类型就不能自动转化成小类型,必须显式强制转换 byte b = (byte) (a+1)
例子二:
int x = 266; int x = 206;
b =(byte)x ; b =(byte)x ;
System.out.print(b) //输出 10 System.out.print(b) //输出 -50
原因:
int 是32位 4个字节 8位1字节
int转换成byte 前面的3个字节 即24位 直接砍掉 就剩最后一位
所以 266 ——(00000000)(00000000)(00000001)(00001010)= 0001010 = 10
206 ——(00000000)(00000000)(00000001)(11001110)= 11001110= -50
最高位是 0 表示是正数,如果是1表示负数,要先按位取反再加1