先让大家看几句代码
class Test{
public static void main(String[] agrs){
byte b = 1;
byte b1 = 2;
byte b2 = 3;
b = b1 + b2;
System.out.println(b);
}
}
对于上面的代码,如果是int型的数据我们经常就是这么用的,然而对于byte型这里在编译会出错
---------- 编译java程序 ----------
Test.java:9: 错误: 可能损失精度
b = b1 + b2;
^
需要: byte
找到: int
1 个错误
输出完成 (耗时 1 秒) - 正常终止
这里的原因是因为b= b1+b2;时由于b1,b2是变量,系统不知道,它两加起来的值的大小(byte 值的范围是1个字节8位),即使前面变量的值是确定的,它也会这么提示出错,因为变量的值是可变的,如果b1和b2前面加上final则不出错,那么问题来了
int a = 1;
int b= 3;
int c= 5;
a= b + c;
这样写为什么不出错,int也是有范围的呀,原因在于java中+,-等这些默认int型,如果数值超出范围,就会做出处理。
另外在这里在写个代码,你就会对上面的有更深的理解;
int a = 10;
int b = 0;
int c=4;
c = a / b;
看到这个代码,你一看就知道代码出错,除数不能为0,但是编译器通过了,它可以生产.class文件,但无法运行.class。
这就是为什么 b2和b3的值确定了,编译还是通不过,因为在编译时,不会判断你变量的值是几(最后这一句是我自己理解的)。