Java a=a+b和a+=b的区别
这个区别主要体现再java算是表达式中的基本数据类型提升的问题。
规则如下:
当一个算术表达式中包含多个基本类型的操作数时,这个算术表达式的数据类型将发生自动提升;自动提升的规则两条:
- 所有byte型、short型和char型将被提升到int型。
- 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。
操作数的等级排列从低到高,如下所示:
byte->short->int->long->float->double
所有我们再来看a=a+b和a+=b的区别:
public class Test {
public static void main(String[] args) {
short a = 1;
short b = 2;
a = a + b;
}
}
此时编译器都过不了:
Type mismatch: cannot convert from int to short
因为在a+b中,自动把a和b提升为int类型,所有a+b的结果是int类型,然后把a+b的结果赋值给a,相当于把大类型赋值给小类型,编译器报无法进行类型转换。
而例子:
public class Test {
public static void main(String[] args) {
short a = 1;
short b = 2;
a += b;
}
}
因为自加(+=)操作没有自动类型提升问题,它不会进行类型提升,自加是一条语句,不是一个算术表达式。