Java賦值運算子(+=、-=、*=、/=)使用中遇到的一些問題
阿新 • • 發佈:2019-02-06
今天學習的是關於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) 來運算的,而其實際的定義確是:
實際使用示例:
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的機器數是
該數值加1後,得到的數值是10000000,二進位制加法
而10000000在byte型別中恰好是-128的機器數表示形式其它型別的符合運算子也可能存在類似的情況,使用時需要注意。