黑马程序员技术交流社区

标题: 提问 [打印本页]

作者: 性感不是骚    时间: 2016-4-4 09:29
标题: 提问
请问 byte a=4;
a++;
a=a+1;
system.out.println(a);
为什么会报错

作者: 菊花爆满山    时间: 2016-4-4 10:27
丢失精度
作者: yaolv7    时间: 2016-4-4 10:34
1、a是个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值.
2、byte类型的变量在进行运算的时候,会自动类型提升为int类型,无法赋值给byte类型.
3、java有优化机制,这里你写的  a++  会实现隐式转换,相当于  a = (byte)(a + 1);  
作者: 马儿不吃草    时间: 2016-4-4 10:47
没有强制转换
作者: 253663946    时间: 2016-4-4 11:46
a = a + 1;这句话编译报错了,因为a是byte,1是int,两者相加的时候a会提升为int型,得出的的结果就是int型,int型赋值给byte型会损失精度,所以报错。改为a = (byte)(a +1);就可以通过了;
作者: lixianglei    时间: 2016-4-5 10:55
精度丢失  a = (byte) a + 1;就行了
作者: willsame    时间: 2016-4-5 14:18
5楼解释的很清楚了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2