A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 性感不是骚 中级黑马   /  2016-4-4 09:29  /  540 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问 byte a=4;
a++;
a=a+1;
system.out.println(a);
为什么会报错

6 个回复

倒序浏览
菊花爆满山 来自手机 中级黑马 2016-4-4 10:27:23
沙发
丢失精度
回复 使用道具 举报
1、a是个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值.
2、byte类型的变量在进行运算的时候,会自动类型提升为int类型,无法赋值给byte类型.
3、java有优化机制,这里你写的  a++  会实现隐式转换,相当于  a = (byte)(a + 1);  
回复 使用道具 举报
没有强制转换
回复 使用道具 举报
a = a + 1;这句话编译报错了,因为a是byte,1是int,两者相加的时候a会提升为int型,得出的的结果就是int型,int型赋值给byte型会损失精度,所以报错。改为a = (byte)(a +1);就可以通过了;
回复 使用道具 举报
精度丢失  a = (byte) a + 1;就行了
回复 使用道具 举报
willsame 来自手机 中级黑马 2016-4-5 14:18:42
7#
5楼解释的很清楚了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马