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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先请运行一下代码,查看下运行结果:
A.byte b = 1 + 1;         
B. byte b = 1; b = b + 1;   
C. byte b = 1; b = b += 1;  
D. byte b = 1; b = ++b;
其中运行A,C,D是正确的,B是错误的。
ACD正确的原因是在初始化的时候有自动类型转换。
那么,自动类型转换是从什么转换到什么,参与运算的时候到底是INT型还是BYTE?为什么发生自动类型转换?
A初始化的时候为什么可以,B为什么就会报错?1不都应该整型么?
求大神解答

9 个回复

正序浏览
本帖最后由 喻忠航 于 2015-5-13 00:25 编辑

B.byte  b = 1; b = b + 1,应为b是变量,所以会向上转型byte ——int——long——float——double
回复 使用道具 举报
三点一线
回复 使用道具 举报
黄冬 中级黑马 2015-5-12 23:06:51
8#
byte b = 1;     整数1默认为int型,但是在赋值的时候会自动判断1是否在byte(-128~127)的范围内,如果在,就可以赋值给byte型的变量b了。   记住,只有在赋值的时候会做这个判断。
byte b = 1 ; b  += 1;   看运算符的分类, += 是属于赋值运算符,所以原理同上述。
byte b = 1;   b = ++b ;     这个是自增
byte b = 1;   b = b+1;     这个是参与运算了,就不多解释了
回复 使用道具 举报
Melo 中级黑马 2015-5-12 22:50:08
7#
b是变量  会有自动类型提升为int类型
回复 使用道具 举报
正常的数字属于数值常量他们相加可以赋值给byte但是byte值在运算的时候会自动转型成int然后参与运算这样的结果就是int 这样的话int是不能自动转型成byte的   而c和d一个是自增 一个赋值所以是可以通过的
回复 使用道具 举报
二楼正解,受益匪浅
回复 使用道具 举报
整数默认为整形的也就是1默认是int  b是byte 两个相加时要括号括起来 进行“强制转换 ” 在前面加(byte)即:(byte)(b+1),至于选项A是自动类项转换的特例(等号后面 没有超过byte的表数范围就可以),自动类型转换的非特例你应该了解的吧。
回复 使用道具 举报
你的b定义的是byte,但赋值运算时。=右边,b按int型来计算,然后就相当于一个int型数据赋值给byte,大转小是需要强制转换类型的啊,不强制肯定会出错
回复 使用道具 举报
byte,short,char类型在运算时会自动转换成int类型进行运算,b+1运算后为int类型,而b被定义为byte类型,int类型不能存放进byte类型里,会出现类型转换异常;自动转换类型是:char,byte,short==》int==》long==》float==》double,左边类型会自动转换成右边类型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马