首先,基本数据类型 byte 和 int 的取值范围不同;byte 的取值范围是 -128~127 ,int 的取值范围是 -2[sup]31[/sup]~2[sup]31[/sup]-1
byte x = 2,y=3,z;
z=x+y;
这里x和y都是变量, 编译器(JVM)在编译时(byte类型取值是有限的),它在判断右边的表达式是两个变量, 意味着这两值不确定、可能随时变化,编译器无法检查,也无法确定是否在byte字节范围之内, 它检查不了就会报错(可能丢失精度);
int a=2,b=3,c;
c=a+b; //为什么不报错???
在整型中,int是默认的类型,默认int运算,所以不会报错。
在两个数进行运算的过程中,一旦结果超出这个范围,jvm底层自动有强制转换过程,保留自己原有位置、高位全舍弃。 这就是byte和int的区别,int属于默认类型,它就没有byte上面那样的问题。
上面 z = (byte)(x+y);将结果强制为byte类型,在赋值给byte类型就没有问题了。
|