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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 探索者 中级黑马   /  2015-5-20 11:48  /  585 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
        byte a = 5;
        a= a + 3;//报错
        a= (byte)a+3;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
疑问:第一句:byte b=3,整数3默认不也是int类型,为什么不需要强行转换,再赋值给b?第三句中(b+4)也是int类型却需要进行强制转换

9 个回复

倒序浏览
唉         下次问题的时候你写的明白点啊    你这想问什么都说不清楚怎么解答
回复 使用道具 举报
菜鸟的求学路 发表于 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:27
是的,不好意思,改了一下,但后面的问的代码没有改过来,正确的代码如下:
        byte a = 5;
        ...

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

恩,理解了
回复 使用道具 举报
代码不完整,根本看不懂要问什么
回复 使用道具 举报
songyu 中级黑马 2015-5-21 10:44:34
8#
因为整数5是一个确定的值,又没有超出byte的取值范围,而(a+3)中的a是一个变量,如果a的值过大会超出 范围,损失精度.
回复 使用道具 举报
songyu 中级黑马 2015-5-21 10:45:56
9#
因为整数5是一个确定的值,又没有超出byte的取值范围,而(a+3)中的a是一个变量,如果a的值过大会超出 范围,损失精度.
回复 使用道具 举报
水水更健康!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马