一道面试题“在java中 a+=b
和a=a+b
有什么区别”
在java中,a+=b和a=a+b的主要区别是在运算的精度上。类似的有“-= 、 *= 、/= 、%= ”
- 下面看下a=a+b的形式:
public class TestDemo{
public static void main(String[] args){
byte a = 1;
a = a + 4;
System.out.println(a);
}
}
上边代码不能运行因为:“类型不匹配:不能从int转换为byte”,a是byte类型,而数字4默认是int 类型。a+4时,会进行 自动类型转换 ,所以a+4 会转换成int类型。而变量a还是byte类型,将int 类型的a+4赋值给byte类型的a ,会报错。
也可以进行强类型转换,将已经转换成int类型的a+4强制转换为byte类型,但是这种转换可能会导致溢出或者精度的下降:
public class TestDemo{
public static void main(String[] args){
byte a = 1;
a = (byte) (a + 4);
System.out.println(a);
}
}
- 下面看下a+=b的形式:
public class TestDemo{
public static void main(String[] args){
byte a = 1;
a += 4;
System.out.println(a);
}
}
程序正确运行。需要明确的是“+=”是java中的一个运算符,而不是两个,所以在运算时 会进行自动类型转换。
- 总结:在两个变量的数据类型一样时:a+=b 和a=a+b 是没有区别的。但是当两个变量的数据类型不同时,就需要考虑一下数据类型自动转换的问题了,也就是涉及到精度了。