黑马程序员技术交流社区
标题:
加法和加等的区别~
[打印本页]
作者:
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