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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天看到毕老师的视频
byte b=6;
b=b+2;//这一句不能通过编译,我理解了。因为b是byte型,2为int型
b+=2;//但是这一句为什么能通过编译我还是不理解,请赐教

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

16 个回复

倒序浏览
b+=2,这里面包含了强制转换~~

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报
因为赋值运算符,进行赋值时,有用一个强制类型转换自动完成。所以自动转换为int
回复 使用道具 举报

b+=2;直接进行运算,因为里面包含了强制转换。
回复 使用道具 举报
混合赋值操作符(就是+=、-=、<<=这些)的公式
  1. E1 op= E2 等价于 E1 = ( T ) ( ( E1 ) op ( E2 ) )
复制代码
其中T是E1的类型,op是混合赋值运算符
举例来说:
  1. short x=3;
  2. x+=4.6;
复制代码
等价于
  1. short x=3;
  2. x=(short)(x+4.6);
复制代码
参考资料:
Java Language Specification,Third Edition      15.26.2 Compound Assignment Operators

点评

谢谢啦,好清晰  发表于 2015-4-12 08:09
回复 使用道具 举报
赋值运算符内部自动完成了强转动作,记住这个例子就行!
回复 使用道具 举报
好知识点
回复 使用道具 举报
b+=2它里面自动转换为int类型计算,计算后又自动转换为byte
回复 使用道具 举报
第二句中有个隐式的强制转换动作,记住就行了!
回复 使用道具 举报
b+=2这里面隐藏了一个强制类型转换,跟b=(byte)(b+2)是一样的
回复 使用道具 举报
不会  不过确实是个好的疑难点
回复 使用道具 举报
b=b+1是两次运算,b被提升为int型,运算结果为int,无法赋值给byte类型 。b+=2是一次运算,包含了一个隐藏的类型转换,相当于 b=(byte)(b+2)。
回复 使用道具 举报
第一句是算数运算,第二句是赋值运算,就是这里的区别,导致自动提升的不一样
回复 使用道具 举报
waylent 发表于 2015-4-11 23:37
混合赋值操作符(就是+=、-=、

一目了然啊,好清楚
回复 使用道具 举报
是因为“+=”这个符号的原因,它隐含类型转换的功能
回复 使用道具 举报
第二个 赋值运算符 包含了自动转换操作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马