黑马程序员技术交流社区

标题: 加法和加等的区别~ [打印本页]

作者: x378320002    时间: 2013-5-26 15:29
标题: 加法和加等的区别~
本帖最后由 x378320002 于 2013-5-27 09:58 编辑

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

作者: 杨青    时间: 2013-5-26 15:36
byte类型的值能和int类型的值相加吗,我在疑惑啊
作者: 小羽天空    时间: 2013-5-26 16:59
这两种方法其实是一样的,只是+=在运行过程中会自动帮你装换成+=前面的类型,+需要你自己转换,如你的例子
byte a=126; a+=4;
byte b=126; b=(byte) (b+4);
至于为什么int类型就一样了,
这是因为,byte是字节是8位,而int是32位,就像int转换成double可以直接转,而double转成int需要加强制转化。

                               
作者: 、zhi    时间: 2013-5-26 17:03
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
作者: HM张博文    时间: 2013-5-26 17:21
楼上的回答都很好,我就不说了
作者: 王靖远    时间: 2013-5-26 17:26
a+=4没有转型,但是byte型最大是127,所以结果损失精度。
a = a +4 因为4默认int型,所以a被提升为了int型,这样就没有损失精度 你若这样写 a =(byte)(a+4) 就和a+=4一样的结果了。这是将int型强制转换成byte型,会损失精度
作者: ccywhut    时间: 2013-5-26 19:09
   详细说明一下:
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型的。





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