黑马程序员技术交流社区

标题: 关于强制类型转换的问题 [打印本页]

作者: 探索者    时间: 2015-5-20 11:48
标题: 关于强制类型转换的问题
代码如下:
        byte a = 5;
        a= a + 3;//报错
        a= (byte)a+3;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
疑问:第一句:byte b=3,整数3默认不也是int类型,为什么不需要强行转换,再赋值给b?第三句中(b+4)也是int类型却需要进行强制转换
作者: 菜鸟的求学路    时间: 2015-5-20 11:58
唉         下次问题的时候你写的明白点啊    你这想问什么都说不清楚怎么解答
作者: 探索者    时间: 2015-5-20 12:27
菜鸟的求学路 发表于 2015-5-20 11:58
唉         下次问题的时候你写的明白点啊    你这想问什么都说不清楚怎么解答 ...

是的,不好意思,改了一下,但后面的问的代码没有改过来,正确的代码如下:
        byte a = 5;
        a= a + 3;//报错
        a= (byte)(a+3);//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
疑问:第一句:byte a=5,整数5默认不也是int类型,为什么不需要强行转换,再赋值给a?而第三句中(a
+5)也是int类型却需要进行强制转换,是为什么?
作者: 探索者    时间: 2015-5-20 12:29
探索者 发表于 2015-5-20 12:27
是的,不好意思,改了一下,但后面的问的代码没有改过来,正确的代码如下:
        byte a = 5;
        ...

没注意,发的太快了,第三句是这样的,这会应该没问题了:
a= (byte)(a+3);//强制类型转换,强制将a+3的结果转换为byte类型,再赋值给a。
作者: 马也keyboard    时间: 2015-5-20 13:14
按lz疑问顺序回答:
1、byte a = 5;可以正常编译是因为5在byte型数据范围(-128~127)内,编译器就可以吧int型数据赋值给byte,但是如果吧5改成128,就一样会报错了,这时候就需要强转赋值
2、和1一样的道理,当赋值的是一个算式的时候,编译器无法预知算式的结果是否在(-128~127),所以在编译的时候需要强制转换
作者: 探索者    时间: 2015-5-20 13:18
马也keyboard 发表于 2015-5-20 13:14
按lz疑问顺序回答:
1、byte a = 5;可以正常编译是因为5在byte型数据范围(-128~127)内,编译器就可以吧in ...

恩,理解了
作者: zq19910303    时间: 2015-5-21 07:28
代码不完整,根本看不懂要问什么
作者: songyu    时间: 2015-5-21 10:44
因为整数5是一个确定的值,又没有超出byte的取值范围,而(a+3)中的a是一个变量,如果a的值过大会超出 范围,损失精度.
作者: songyu    时间: 2015-5-21 10:45
因为整数5是一个确定的值,又没有超出byte的取值范围,而(a+3)中的a是一个变量,如果a的值过大会超出 范围,损失精度.
作者: 冷雨敲窗被未温    时间: 2015-5-21 11:45
水水更健康!




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