定义一个变量byte x = 129;有没有问题?有问题如何解决?结果是多少呢? 写出运算过程
class Test{
//编写一个方法
public static void main(String[] args){
byte x = 129;
/*
分析:
byte的取值范围是-128~127;而129超出了byte的取值范围
因此JVM会判断129为int类型,但是int无法自动转换为byte
所以需要强制类型转换
解决方案:强制类型转换
强制类型转换格式:
目标数据类型 变量名 = (目标数据类型)(结果);
即:byte x = (byte)129;
输出的结果为-127;
*/
/*
输出结果分析:计算机底层运行代码时,采用的是补码的形式
129为正数,原码,反码,补码相同
00000000 00000000 00000000 10000001 129的补码(int类型)
强制转换为byte时,会变成:
10000001 强制转换后的补码;
10000000 将补码转换为反码;
11111111 将反码转换为原码
得出结果:-127
*/
//byte x = 129;错误
//应改为
byte x = (byte)129;
//输出结果
System.out.println("结果为:" + x);
}
}
强制类型转换总结
当不同的数据类型参与运算时,char,short,byte之间不参与转换,但是会自动转换为int;
但是int类型的数据类型不会自动转换为char, short,byte,因此需要强制类型转换