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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x378320002 中级黑马   /  2013-5-26 15:29  /  1198 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 x378320002 于 2013-5-27 09:58 编辑

加法和加等一样吗,像byte a=126;a+=4;和byte a=126;a=a+4;到底区别在哪呢?
如果把byte改成int,为什么就又一样了啊?

评分

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

查看全部评分

6 个回复

倒序浏览
byte类型的值能和int类型的值相加吗,我在疑惑啊
回复 使用道具 举报
这两种方法其实是一样的,只是+=在运行过程中会自动帮你装换成+=前面的类型,+需要你自己转换,如你的例子
byte a=126; a+=4;
byte b=126; b=(byte) (b+4);
至于为什么int类型就一样了,
这是因为,byte是字节是8位,而int是32位,就像int转换成double可以直接转,而double转成int需要加强制转化。

                               
回复 使用道具 举报
byte a=126;
a+=4;
等价于:
byte b=126;
b=(byte) (b+4);
使用+=符合会自动转型

byte a=126;
a=a+4;
会报错,因为4是整型,整型转换为byte[]类型,会损失精度,需要强制转型。


又因为byte能表示最大的数为-128-127,所以进行+4操作得出的结果是-126

全部换成int的时候,一方面不需要转型,另一方面不会损失精度,所以结果是130
回复 使用道具 举报
楼上的回答都很好,我就不说了
回复 使用道具 举报
a+=4没有转型,但是byte型最大是127,所以结果损失精度。
a = a +4 因为4默认int型,所以a被提升为了int型,这样就没有损失精度 你若这样写 a =(byte)(a+4) 就和a+=4一样的结果了。这是将int型强制转换成byte型,会损失精度
回复 使用道具 举报
   详细说明一下:
java中不同类型数据之间进行算术运算,为了保证结果的精确,系统会将结果自动转换成精度更高的的数据类型。精度由高度到低为double,float,long ,int ,(short,char,byte),
进行算术运算的最低等级是int型,这意味着如果参与运算的数据类型精度都小于int,即为(short,char,byte)中的任意类型,数据都会自动转换成int型。


byte a=126;a=a+4。
   +是算术运算符,由于4为int型,系统会将计算结果类型按上面的规则自动转换为int型,int型的结果无法赋值给byte类型的 a变量,只能强行转换,强行转换会损失精度。
另外将 a变量的类型从byte改为int,结果类型仍然为int,结果与变量类型就会匹配。
  +=是复合赋值运算符,复合赋值运算不会改变结果的类型。
byte a=126;a+=4;结果类型仍然是byte类型,与byte类型的 a变量匹配,所以不会报错。 改为int也会匹配,都是int型的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马