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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 瑞雪雄起 中级黑马   /  2015-9-16 20:52  /  615 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

情况一:byte b=1+2;(正确) 由于表达式左边为int,int在没强制转换下,不能转为byte,但是编译器会在编译时会强制准换为byte,只是你看不到而已。(强制转换后没有数据丢失)
情况二:byte b=1;b+=1;同上
情况三:byte b=1;b=b+1;(错误)因为编译在编译后,在程序的运行过程中,将无法预测b的值,可能b的值超出byte的范围,如果编译器把他强制转换的话,那将会造成数据丢失

9 个回复

倒序浏览
byte b = (byte)1+2;直接这样不可以吗??
回复 使用道具 举报
韩凯5354 发表于 2015-9-16 21:02
byte b = (byte)1+2;直接这样不可以吗??

你这个是错误的,得这样:
  1. byte b = (byte)(1+2);
复制代码

这才是强制转换,不然你那个式子是把1转换成byte型之后又和int型的2相加,结果还是int,是不能够用byte型接受的。
回复 使用道具 举报 0 1
裘-样 发表于 2015-9-16 21:10
你这个是错误的,得这样:

这才是强制转换,不然你那个式子是把1转换成byte型之后又和int型的2相加,结 ...

恩恩     确实错了    都忘干净了    之前刚学完就还给老师了
回复 使用道具 举报
应该是byte b=(byte)(1+2);
回复 使用道具 举报
本帖最后由 大大大卷 于 2015-9-16 22:51 编辑

难道不是:    情况一:byte  = 2+3 ;是吧2+3的值直接赋给b,只要这个值再-128~127之内,都不会报错
     情况二:  b +=2;  +=这个操作时隐藏了byte这个强转动作
     情况三:  b = b1+b2  ,程序在进行运算的时候会自动将byte型转换为int型,b1+b2的值相加后是int型,有可能超出byte范围,因此必须进行强转

其实还有情况四:
  b = b1+3;这里b,b1都是byte型,但却通不过编译,原因同情况三


回复 使用道具 举报
人生苦旅 来自手机 中级黑马 2015-9-16 22:57:39
7#
大大大卷 发表于 2015-9-16 22:46
难道不是:    情况一:byte  = 2 3 ;是吧2 3的值直接赋给b,只要这个值再-128~127之内,都不会报错
     情 ...

对头,赞一个,这样解释好理解
回复 使用道具 举报
只要编译器能预知它的范围没超过byte的范围就可以
回复 使用道具 举报
第一个不对,应该是byte b=(byte)(1+2)
回复 使用道具 举报
因为b=b+1;在中常量1与变量b进行运算是会自动提升为int类型的,而b是byte类型,所以编译报错;
b+=1;是等价于byte b=(byte)(b+1);所以编译就不会报错,而"+="这符号隐含了类型强制转换的功能;
谢谢 希望能帮到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马