黑马程序员技术交流社区

标题: java基础 基本数据类型部分,请教 [打印本页]

作者: 蓝墨清幽    时间: 2015-4-11 23:21
标题: java基础 基本数据类型部分,请教
今天看到毕老师的视频
byte b=6;
b=b+2;//这一句不能通过编译,我理解了。因为b是byte型,2为int型
b+=2;//但是这一句为什么能通过编译我还是不理解,请赐教

作者: 上善若水_Wx    时间: 2015-4-11 23:26
b+=2,这里面包含了强制转换~~
作者: 黑马小成    时间: 2015-4-11 23:27
因为赋值运算符,进行赋值时,有用一个强制类型转换自动完成。所以自动转换为int
作者: 飞翔的侠客604    时间: 2015-4-11 23:32

b+=2;直接进行运算,因为里面包含了强制转换。
作者: waylent    时间: 2015-4-11 23:37
混合赋值操作符(就是+=、-=、<<=这些)的公式
  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
作者: caotierong    时间: 2015-4-12 01:16
赋值运算符内部自动完成了强转动作,记住这个例子就行!
作者: xlunaer    时间: 2015-4-12 07:53
好知识点
作者: 段黄军    时间: 2015-4-12 08:09
b+=2它里面自动转换为int类型计算,计算后又自动转换为byte
作者: minliang    时间: 2015-4-12 08:56
第二句中有个隐式的强制转换动作,记住就行了!
作者: 胡帅    时间: 2015-4-12 09:02
b+=2这里面隐藏了一个强制类型转换,跟b=(byte)(b+2)是一样的
作者: xu921114    时间: 2015-4-12 11:14
不会  不过确实是个好的疑难点
作者: saghir    时间: 2015-4-12 11:19
b=b+1是两次运算,b被提升为int型,运算结果为int,无法赋值给byte类型 。b+=2是一次运算,包含了一个隐藏的类型转换,相当于 b=(byte)(b+2)。
作者: 李永佳    时间: 2015-4-12 11:35
第一句是算数运算,第二句是赋值运算,就是这里的区别,导致自动提升的不一样
作者: Sylvanas    时间: 2015-4-12 12:20
waylent 发表于 2015-4-11 23:37
混合赋值操作符(就是+=、-=、

一目了然啊,好清楚
作者: lslkkk    时间: 2015-4-12 12:25
是因为“+=”这个符号的原因,它隐含类型转换的功能
作者: 徐顺醒    时间: 2015-4-12 17:47
第二个 赋值运算符 包含了自动转换操作




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