标题a=a+b和a+=b真的一样吗?
今天在刷头条的时候看见这样一道面试题:在Java中:a=a+b和a+=b,这两个运算一样吗?
相信刚接触Java语言的人,第一感觉就是一样的,其实不然。
在两个变量的数据类型一样时:a+=b 和a=a+b 是没有区别的。
int a = 10;
int b = 10;
a=a+4;
b+=4;
System.out.println(a);
System.out.println(b);
//当数据类型一样时,运行发现,两个运算式没有区别
当两个变量的数据类型不一样时,就涉及到了数据类型转换的问题,也就是精度的问题。
byte a= 1;
a=a+4; //报错,原因---Type mismatch: cannot convert from int to byte
a+=4;
System.out.println(a);
//因为a是byte类型,而数字4默认是int类型。在a+4时,会进行自动类型转换 ,
//所以a+4 会转换成int类型。而变量a还是byte类型,
//将int类型的a+4赋值给byte类型的a,便会报错
byte a= 1;
a=(byte) (a+4);
a+=4;
System.out.println(a);
//进行强制转换后,将int型的a+4转换为byte型,是可以的。
//但是这种转换可能会导致溢出或者精度的下降。
//如果容忍可能出现的误差,可以使用这种转换。
//而a+=4便不会出现大问题
“+=”是java中的一个运算符,而不是两个,所以在运算时会进行自动类型转换,将低级变量可以直接转换为高级变量。所以在编译时没有报错。
“a=a+b”则存在“=”左右数据类型是否能够直接赋值的问题,在进行强制转换的时候,可能会出现数据溢出和精度改变的问题