Java中 a+=b和a=a+b有什么區別?(轉)


在java語言中,a+=b和a=a+b的主要區別是在運算的精度上。類似的有“-= 、 *= 、/= 、%= ”,這里以a+=b 與 a=a+b 舉例說明一下。

   附:隱式類型轉換:

  自動類型轉換,也稱隱式類型轉換,是指不需要書寫代碼,由系統自動完成的類型轉換。
    轉換規則為:
    從存儲范圍小的類型到存儲范圍大的類型。
    具體規則為:
    short(char)→int→long→float→double
    也就是說int類型的變量可以自動轉換為long類型,示例代碼:
    int b = 10;long l = b;

1.    下面是一串代碼,我們試一下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 類型。在java中,在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);

  }

}

 

 

(2)下面試一試a+=b的形式

 

public class TestDemo {

  public static void main(String[] args) {

     byte a=1;

     a+=4;

     System.out.println(a);

  }

}

 

我們發現結果是正確的,程序也沒毛病。大家需要明確的是“+=”是java中的一個運算符,而不是兩個,所以在運算時 會進行自動類型轉換,也就是低級變量可以直接轉換為高級變量。所以在編譯時沒有報錯。

 

(3),總結一下,在兩個變量的數據類型一樣時:a+=b 和a=a+b 是沒有區別的。

但是當兩個變量的數據類型不同時,就需要考慮一下數據類型自動轉換的問題了。

也就是涉及到精度了。

--------------------- 作者:kingdom_wp 來源:CSDN 原文:https://blog.csdn.net/m0_38022029/article/details/79606104?utm_source=copy 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM