黑马程序员技术交流社区

标题: 关于byte的问题 [打印本页]

作者: 瑞雪雄起    时间: 2015-9-16 20:52
标题: 关于byte的问题
情况一:byte b=1+2;(正确) 由于表达式左边为int,int在没强制转换下,不能转为byte,但是编译器会在编译时会强制准换为byte,只是你看不到而已。(强制转换后没有数据丢失)
情况二:byte b=1;b+=1;同上
情况三:byte b=1;b=b+1;(错误)因为编译在编译后,在程序的运行过程中,将无法预测b的值,可能b的值超出byte的范围,如果编译器把他强制转换的话,那将会造成数据丢失
作者: 韩凯5354    时间: 2015-9-16 21:02
byte b = (byte)1+2;直接这样不可以吗??
作者: 裘-样    时间: 2015-9-16 21:10
韩凯5354 发表于 2015-9-16 21:02
byte b = (byte)1+2;直接这样不可以吗??

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

这才是强制转换,不然你那个式子是把1转换成byte型之后又和int型的2相加,结果还是int,是不能够用byte型接受的。
作者: 韩凯5354    时间: 2015-9-16 21:40
裘-样 发表于 2015-9-16 21:10
你这个是错误的,得这样:

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

恩恩     确实错了    都忘干净了    之前刚学完就还给老师了
作者: 哈哈我赢了    时间: 2015-9-16 21:49
应该是byte b=(byte)(1+2);
作者: 大大大卷    时间: 2015-9-16 22:46
本帖最后由 大大大卷 于 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
大大大卷 发表于 2015-9-16 22:46
难道不是:    情况一:byte  = 2 3 ;是吧2 3的值直接赋给b,只要这个值再-128~127之内,都不会报错
     情 ...

对头,赞一个,这样解释好理解
作者: 瑞雪雄起    时间: 2015-9-17 22:27
只要编译器能预知它的范围没超过byte的范围就可以
作者: WOJIAOLIZHEN01    时间: 2015-9-17 22:36
第一个不对,应该是byte b=(byte)(1+2)
作者: 談哋児    时间: 2015-9-17 23:12
因为b=b+1;在中常量1与变量b进行运算是会自动提升为int类型的,而b是byte类型,所以编译报错;
b+=1;是等价于byte b=(byte)(b+1);所以编译就不会报错,而"+="这符号隐含了类型强制转换的功能;
谢谢 希望能帮到你




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