狗屎篇1:a+=b和a=a+b的区别?

670 阅读1分钟

提问:在Java语言中a+=b和a=a+b的区别?

答:存在区别,主要区别为数据类型转换导致的运算时精度问题

  1. 在两变量为相同数据类型时,计算结果不存在精度丢失和偏差;

  2. 在两变量为不相同数据类型时,计算过程中会进行数据类型转换,其转换遵循‘’自动类型提升‘’和‘’强制类型转换‘’的规则,故计算结果存在精度丢失和偏差;

  3. 代码说明:

    • 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
          }
      
  4. 类型转换补充:

    低  ------------------------------------>  高
    
    byte,short,char—> int —> long—> float —> double