問題闡述
在 Java 語言中賦值運(yùn)算符有=,及其擴(kuò)展運(yùn)算符+=、-=、*=、/=
等復(fù)合賦值運(yùn)算符,這些復(fù)合賦值運(yùn)算符同樣可以實(shí)現(xiàn)加、減、乘、除等四則運(yùn)算。請問復(fù)賦值運(yùn)算符+=計算的結(jié)果一定正確嗎?
達(dá)內(nèi)java培訓(xùn)解答
通過復(fù)合賦值運(yùn)算符可以實(shí)現(xiàn)運(yùn)算和為變量賦值的操作,但是如果不慎重使用復(fù)合賦值運(yùn)算符,就可能會計算出錯誤的結(jié)果,這對于一些重要的計算將會造成嚴(yán)重?fù)p失,例如,
銀行的存取款業(yè)務(wù)是不允許有任何差錯的,否則將會造成無法挽回的經(jīng)濟(jì)損失。
short money1 = 30000; //聲明 short 型變量
int money2 = 35000;
//聲明 int 型變量
money1 += money2; //用+=運(yùn)算符計算 money1 與 money2
的和,并賦值
說明:
上面示例輸出變量 money1 的值為-536,并不是預(yù)期的結(jié)果 65000,這是因?yàn)樵趫?zhí)行語句
money1+=money2 時,由于計算結(jié)果的值超出了 short
型數(shù)據(jù)的取值范圍,所以自動將高位截掉,因而產(chǎn)生了錯誤的結(jié)果。因此,在使用復(fù)合賦值運(yùn)算符時,一定要特別小心,如果這個示例在軟件中計算的是金額,損失可就大了。
對于上面的示例,如果將語句 money1+=money2 寫成語句
money1=money1+money2,這樣程序在編譯時就會產(chǎn)生錯誤,因此就不會出現(xiàn)上面的錯誤結(jié)果了。
示例:
short money1 = 30000; //聲明 short 型變量
int money2 = 35000;
//聲明 int 型變量
money1 = money1 + money2; //計算 money1 與 money2
的和,
說明:
上面示例在編譯時會出錯,因此不會輸出任何結(jié)果,如果使用的是 Eclipse 等集成開
發(fā)工具,還會在語句 money1 =
money1 +
money2;處出現(xiàn)紅色波浪線,并在該語句的行號左
側(cè)顯示一個帶小燈泡和紅叉標(biāo)記的圖標(biāo),用鼠標(biāo)單擊該圖標(biāo),就回去顯示如圖3.12所示的錯誤提示信息,從而可以方便地對程序進(jìn)行排錯。
點(diǎn)評
上面的兩個示例,歸根結(jié)底都是由于發(fā)生溢出而產(chǎn)生的錯誤。所以,在編程時一定要
考慮是否會發(fā)生溢出現(xiàn)象,對于可能發(fā)生溢出的情況,必須要進(jìn)行處理,否則就會出現(xiàn)意
想不到的錯誤結(jié)果,甚至?xí)o企業(yè)造成嚴(yán)重?fù)p失。