黑马程序员技术交流社区

标题: 自动及强制数据类型转换疑问 [打印本页]

作者: hdf5210521    时间: 2015-9-11 09:56
标题: 自动及强制数据类型转换疑问
byte b1=3,b2=4,b;b=b1+b2;
b=3+4;
问题:哪个会编译失败?

讨论:未上机前,我的答案是两个都可以成功,原因是b=3+4,等号右面是int型,赋值给byte型是,byte型自动提升为int型。结果证明,这个确实变异没问题;b=b1+b2我认为也没问题,原因是b1和b2都为byte型,他们的和也为byte型,赋值给byte型的b是完全没有问题的,但是编译失败,请问原因是什么?

作者: hdf5210521    时间: 2015-9-11 10:47
我的理解是同是byte类型的数据相加结果可能超过byte类型的最大值,所以报错
作者: boboyuwu    时间: 2015-9-11 11:24
如果指定了byte的值没有超过范围不会出错,但是如果参与了计算计算没有超出范围也会编译出错因为系统不知道你计算之后会不会超出范围
作者: 浮光掠影    时间: 2015-9-11 13:58
这个在视频里看过。忘了。刚才百度了下。说是 3  4事常量。相加在byte-128到127之间,很明显的。而写成b1+b2默认是int类型了,但是机器不能保证他们相加还在byte的范围呢。所以就会报错。除非强转。
和你的思路是一样的
作者: hdf5210521    时间: 2015-9-17 14:01
浮光掠影 发表于 2015-9-11 13:58
这个在视频里看过。忘了。刚才百度了下。说是 3  4事常量。相加在byte-128到127之间,很明显的。而写成b1+b ...

谢谢解答
作者: hdf5210521    时间: 2015-9-17 14:06
boboyuwu 发表于 2015-9-11 11:24
如果指定了byte的值没有超过范围不会出错,但是如果参与了计算计算没有超出范围也会编译出错因为系统不知道 ...

谢谢回复




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