- Java開(kāi)發(fā)之道
- 張振坤 李鐘尉 陳丹丹等編著
- 740字
- 2018-12-27 19:53:54
陷阱11 不得不防——不可變的整數(shù)運(yùn)算
在Java中對(duì)于較大整數(shù)值的運(yùn)算,可以使用BigInteger類來(lái)實(shí)現(xiàn),該類代表不可變的任意精度的整數(shù),并且提供了與算術(shù)運(yùn)算對(duì)應(yīng)的方法,可以實(shí)現(xiàn)較大整數(shù)的運(yùn)算,如add方法就與算術(shù)運(yùn)算中的加法運(yùn)算相對(duì)應(yīng)。
注意
在使用BigInteger類進(jìn)行運(yùn)算時(shí),并不是改變當(dāng)前BigInteger類的實(shí)例值,比如有兩個(gè)BigInteger實(shí)例x和y,當(dāng)x調(diào)用add方法與y相加時(shí),可以通過(guò)語(yǔ)句x. add (y)來(lái)實(shí)現(xiàn),但是該語(yǔ)句執(zhí)行后,程序并沒(méi)有改變變量x的值,而是整個(gè)語(yǔ)句x. add (y)的值才是x加上y的和,這也是很多程序員使用該類容易發(fā)生的錯(cuò)誤,因?yàn)檎Z(yǔ)句x. add (y)并不代表語(yǔ)句x=x+y,而是代表表達(dá)式x+y。
示例:
BigInteger x = new BigInteger ("2500"); // 創(chuàng)建BigInteger對(duì)象x,其值是2500 BigInteger y = new BigInteger ("500"); // 創(chuàng)建BigInteger對(duì)象y,其值是500 x. add (y); // 計(jì)算x與y的和 System. out. println (x); // 輸出x的值
說(shuō)明
運(yùn)行本示例,程序?qū)⑤敵觥?500”,這個(gè)值并不是x 與y 的和“3000”,因此通過(guò)該示例應(yīng)該明白,當(dāng)執(zhí)行語(yǔ)句x. add (y)時(shí)并不能改變x的值,因?yàn)锽igInteger類是不可變的任意精度的整數(shù),所以不能通過(guò)語(yǔ)句x. add (y)改變x的值,但是語(yǔ)句x. add (y)返回的值卻是x與y的和,因此可以再聲明一個(gè)BigInteger對(duì)象sum,并將語(yǔ)句x. add (y)的返回值賦值給sum,這樣,sum的值就是“3000”了。
下面的示例對(duì)前一個(gè)示例做了改進(jìn),使用其能夠正確計(jì)算出x 與y 的和,并輸出它們的和3000。
示例:
BigInteger x = new BigInteger ("2500"); // 創(chuàng)建BigInteger對(duì)象x,其值是2500 BigInteger y = new BigInteger ("500"); // 創(chuàng)建BigInteger對(duì)象y,其值是500 BigInteger sum =x. add (y); // 計(jì)算x與y的和并賦值給sum System. out. println (sum); // 輸出sum的值
說(shuō)明
運(yùn)行本示例,程序輸出了“3000”,這也充分說(shuō)明了通過(guò)x. add (y)可以計(jì)算x與y的和,但是并不能改變x的值,因此在使用BigInteger類時(shí)一定要特別小心,尤其是用于商業(yè)用途時(shí)更應(yīng)小心謹(jǐn)慎,不要試圖通過(guò)該類來(lái)改變自身的值,因?yàn)檫@樣的改變會(huì)失敗,如前一個(gè)示例試圖改變x的值時(shí)并沒(méi)有成功,因此該類如果使用不當(dāng)就會(huì)造成巨大的損失。
- Python編程自學(xué)手冊(cè)
- 潮流:UI設(shè)計(jì)必修課
- Apache Spark 2.x Machine Learning Cookbook
- Machine Learning with R Cookbook(Second Edition)
- Object-Oriented JavaScript(Second Edition)
- C語(yǔ)言程序設(shè)計(jì)
- 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道(修訂版)
- Kivy Cookbook
- 快速入門(mén)與進(jìn)階:Creo 4·0全實(shí)例精講
- Python從入門(mén)到精通(第3版)
- JQuery風(fēng)暴:完美用戶體驗(yàn)
- Responsive Web Design with jQuery
- Ubuntu Server Cookbook
- 現(xiàn)代JavaScript編程:經(jīng)典范例與實(shí)踐技巧
- Office VBA開(kāi)發(fā)經(jīng)典:中級(jí)進(jìn)階卷