提问:在Java语言中a+=b和a=a+b的区别?
答:存在区别,主要区别为数据类型转换导致的运算时精度问题
-
在两变量为相同数据类型时,计算结果不存在精度丢失和偏差;
-
在两变量为不相同数据类型时,计算过程中会进行数据类型转换,其转换遵循‘’自动类型提升‘’和‘’强制类型转换‘’的规则,故计算结果存在精度丢失和偏差;
-
代码说明:
-
a的数据类型级别小于b,遵循强制类型转换规则
public static void main(String[] args) { short a = 11; int b = 22; a += b;//强制类型转换为short类型 System.out.println(a);//3 }
public static void main(String[] args) { short a = 11; int b = 22; a = a + b;//需要的类型:short,提供的类型:int,编译器报错,只能进行强制类型转换:a = (short) (a + b); System.out.println(a); }
-
a的数据类型级别大于b,遵循自动类型提升规则
public static void main(String[] args) { short a = 11; int b = 22; b += a;//自动类型提升为int类型 System.out.println(b);//33 }
public static void main(String[] args) { short a = 11; int b = 22; b = a + b;//short的数据类型级别低于int,自动类型提升 System.out.println(b);//33 }
-
-
类型转换补充:
低 ------------------------------------> 高 byte,short,char—> int —> long—> float —> double