在java中,如下编写
byte b = 4;
b = 3 + 7;
编译能通过,但如果像下面这样编写,则编译无法通过,关键在于最后一句b=b1+b2上
byte b = 3;
byte b1 = 2;
byte b2 = 9;
b = b1 + b2;
原因:
首先,定义byte b = 4;为什么能通过,是因为java中默认整型都为int类型,所以java默认 4 为int 型,本来按类型是不能将4赋值给变量b的,但是编译器检查4这个数值不超过byte的取值范围(-128~127),所以编译器自动强制类型转换将int型转化成byte型,将4赋给了b。
而在下面一个例子中,由于b1与b2都为变量,编译时无法确定值,编译器无法确定b1 + b2的值是否会超过byte的取值范围,所以编译的时候报错:损失精度!
而:
int x = 4;
int x1 = 3;
int x2 = 98;
x = x1 + x2;
编译时却可以通过,是因为运算结果一定为整数,java默认为整数是int所以可以编译通过(好吧,这里我也不太懂,望大神解答)