黑马程序员技术交流社区

标题: 问 +=和直接+的区别 [打印本页]

作者: 安逸小弟    时间: 2015-6-8 23:41
标题: 问 +=和直接+的区别
byte b = 1;b = b + 1;和byte b = 1;b+=1;有什么区别跟问题?
作者: 小田    时间: 2015-6-8 23:43
我也不知道
作者: 灰色水晶梦    时间: 2015-6-8 23:53
前面的会报错的 因为·1默认的是int类型和b相加后的值就是int类型了再赋值给byte 类型变量就会丢失精度。而后面那个会自动进行强制类型转换不会报错。
作者: 途中ms前进    时间: 2015-6-9 11:34

byte b = 1;b = b + 1;强制类型提升会报错
byte b = 1;b+=1赋值运算,java语言会对+=特殊处理 所以是正确的
作者: 路途遥远    时间: 2015-6-9 12:17
遇到这种格式l op= r,比如 I += r
等号右边的会转换为左边的类型。然后再进行运算。

遇到这种格式l= l op r,比如 I = I + r
等号右边的会转化会更高的类型。如byte + int 会转换为int,然后再进行运算

所以如果直接byte b = 1;b = b + 1;会报错,还要进行强制转换b = (byte) (b+1);
但是直接b+=1就不报错了
作者: mishisanyi    时间: 2015-6-9 12:57
第一个会报错,b+1的时候,会总动转换成int类型,不能赋值给b,第二个不会,由于+=是强制类型转换
作者: pp7803515    时间: 2015-6-9 13:13
short等格式也一样的,会报错第一个
作者: yang9876q    时间: 2015-6-9 13:13
第一个,b+1会自动转换成int型,报类型转换错误的异常,第二个不报错
作者: java8023    时间: 2015-6-9 18:48
第一个自动类型提升,会报错,第二个隐式的强制类型转换
作者: world.net    时间: 2015-6-9 20:20
类型转换不一样。
作者: 南无ice    时间: 2015-6-9 20:36
这个老师的视频当中有讲过的,左边的 b = b + 1 -->相加之后的类型会成为整型。系统因为丢失精度的原因会报错。而+=为一次运算,讲左右两边的值赋给左边。不会出现错误。也更为方便。




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