黑马程序员技术交流社区
标题:
java中关于自动类型转换的问题
[打印本页]
作者:
南朝小和尚
时间:
2015-5-12 21:16
标题:
java中关于自动类型转换的问题
首先请运行一下代码,查看下运行结果:
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不都应该整型么?
求大神解答
作者:
tinlen
时间:
2015-5-12 21:36
byte,short,char类型在运算时会自动转换成int类型进行运算,b+1运算后为int类型,而b被定义为byte类型,int类型不能存放进byte类型里,会出现类型转换异常;自动转换类型是:char,byte,short==》int==》long==》float==》double,左边类型会自动转换成右边类型。
作者:
尹佳鑫
时间:
2015-5-12 21:38
你的b定义的是byte,但赋值运算时。=右边,b按int型来计算,然后就相当于一个int型数据赋值给byte,大转小是需要强制转换类型的啊,不强制肯定会出错
作者:
小南@159
时间:
2015-5-12 21:48
整数默认为整形的也就是1默认是int b是byte 两个相加时要括号括起来 进行“强制转换 ” 在前面加(byte)即:(byte)(b+1),至于选项A是自动类项转换的特例(等号后面 没有超过byte的表数范围就可以),自动类型转换的非特例你应该了解的吧。
作者:
bboyXiaoNuo
时间:
2015-5-12 22:00
二楼正解,受益匪浅
作者:
q8893616
时间:
2015-5-12 22:15
正常的数字属于数值常量他们相加可以赋值给byte但是byte值在运算的时候会自动转型成int然后参与运算这样的结果就是int 这样的话int是不能自动转型成byte的 而c和d一个是自增 一个赋值所以是可以通过的
作者:
Melo
时间:
2015-5-12 22:50
b是变量 会有自动类型提升为int类型
作者:
黄冬
时间:
2015-5-12 23:06
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; 这个是参与运算了,就不多解释了
作者:
我干阿衰
时间:
2015-5-13 00:12
三点一线
作者:
喻忠航
时间:
2015-5-13 00:21
本帖最后由 喻忠航 于 2015-5-13 00:25 编辑
B.byte b = 1; b = b + 1,应为b是变量,所以会向上转型byte ——int——long——float——double
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2