天天看點

Java指派運算符(+=、-=、*=、/=)使用中遇到的一些問題

       今天學習的是關于Java的基本運算符,這裡我要提一下的是一個作業中遇到的問題,就是關于Java中的指派運算符:+=、-=、*=、/=的問題。

       衆所周知,指派運算符的在所有Java運算符中的優先級是最低的。是以我們遇到某些情況,比如:

       int a = 5;

       a+=5*++a/5 + 2;

       時我們往往會考慮,先對右邊進行運算,此時++a是以a為6。然後右邊總和為8,此時在進行a+=8;的運算,是以a=a+8;得出a=6+8;可是實際我們程式設計運作的情況卻是a為13。這是怎麼一回事呢?其實這是概念的了解錯誤,因為我們遇到這種題我們往往會把上面運算式改為:

       a = a + (5*++a/5+2)來運算的,而其實際的定義确是:

Java指派運算符(+=、-=、*=、/=)使用中遇到的一些問題

實際使用示例:

       int n = 2;

       n += 3;

說明:計算以前的n的值是2,也就是把n + 3的值,也就是5再指派給n,經過運算以後值為5。

這裡關于複合指派運算符還應注意的一點是:

複合指派運算不會改變結果的類型,是以在有些時候運算在邏輯上會出現錯誤,但是符合計算中數值的表述。例如:

byte b = 127;

b += 1;

System.out.println(b);

根據前面的介紹,byte類型的取值區間是-128~127,由于複合指派運算符不改變結果的類型,則導緻結果是-128,而不是128.原因如下:

byte類型值127的機器數是01111111,0表示正數,後續的數值表示127

該數值加1後,得到的數值是10000000,二進制加法

而10000000在byte類型中恰好是-128的機器數表示形式其它類型的符合運算符也可能存在類似的情況,使用時需要注意。