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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安逸小弟 中级黑马   /  2015-6-8 23:41  /  1177 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b = 1;b = b + 1;和byte b = 1;b+=1;有什么区别跟问题?

评分

参与人数 1黑马币 +3 收起 理由
小田 + 3 淡定

查看全部评分

10 个回复

正序浏览
这个老师的视频当中有讲过的,左边的 b = b + 1 -->相加之后的类型会成为整型。系统因为丢失精度的原因会报错。而+=为一次运算,讲左右两边的值赋给左边。不会出现错误。也更为方便。
回复 使用道具 举报
类型转换不一样。
回复 使用道具 举报
第一个自动类型提升,会报错,第二个隐式的强制类型转换
回复 使用道具 举报
第一个,b+1会自动转换成int型,报类型转换错误的异常,第二个不报错
回复 使用道具 举报
short等格式也一样的,会报错第一个
回复 使用道具 举报
第一个会报错,b+1的时候,会总动转换成int类型,不能赋值给b,第二个不会,由于+=是强制类型转换
回复 使用道具 举报
遇到这种格式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就不报错了
回复 使用道具 举报

byte b = 1;b = b + 1;强制类型提升会报错
byte b = 1;b+=1赋值运算,java语言会对+=特殊处理 所以是正确的
回复 使用道具 举报
前面的会报错的 因为·1默认的是int类型和b相加后的值就是int类型了再赋值给byte 类型变量就会丢失精度。而后面那个会自动进行强制类型转换不会报错。
回复 使用道具 举报
我也不知道
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马