1. 程式人生 > >Java賦值運算子(+=、-=、*=、/=)使用中遇到的一些問題

Java賦值運算子(+=、-=、*=、/=)使用中遇到的一些問題

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

眾所周知,賦值運算子的在所有Java運算子中的優先順序是最低的。所以我們遇到某些情況,比如:

int a = 5;

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

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

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.printlnb);

根據前面的介紹,byte型別的取值區間是-128~127,由於複合賦值運算子不改變結果的型別,則導致結果是-128,而不是128.原因如下:

byte型別值127的機器數是

011111110表示正數,後續的數值表示127

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

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