最近在给学生上课的过程中,经过会被学生问到这样的问题:
为什么在编译的时候b2会报错,为什么b不报错。
同时还有更好奇的同学练习这个问题:
看懂了吗?知道为什么吗?
原因是因为Java程序需要经过编译和运行两个步骤完成。上面的错误是编译时期的问题。而编译使用的是JDK中的javac命令,在使用javac命令的时候,就是在启动JDK中的编译器小工具,而编译器在编译检测byte和short类型变量空间的时候会检测数据是否会超存储范围。byte类型开辟的空间默认是1个字节,存储数据的范围是-128到127,因此第一个错误是128超过了byte类型空间能够存储的范围了。
b3 = b3 + 10,同样是需要检测的,但是由于b3是一个变量,在编译的时候,变量根本就没有空间更无法确定具体的值是多少,同时在java中的进行算术运算的时候运算的结果类型要保持一致,b3是byte类型,但是和10(因为java中所有整数默认都是int类型)进行运算,结果是int类型。这样更不能给byte中存放了。
欢迎大家留言与我交流。