官术网_书友最值得收藏!

陷阱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ì)造成巨大的損失。

主站蜘蛛池模板: 武邑县| 裕民县| 威信县| 凤台县| 太仓市| 定兴县| 英吉沙县| 安龙县| 延寿县| 峨眉山市| 洪泽县| 屏山县| 武强县| 通许县| 始兴县| 高雄市| 阿拉善左旗| 柳河县| 武宣县| 施秉县| 基隆市| 沁阳市| 三河市| 益阳市| 昌平区| 尚义县| 朝阳区| 富川| 长泰县| 滁州市| 宁城县| 突泉县| 城口县| 绵阳市| 六盘水市| 云浮市| 全南县| 永新县| 亚东县| 长阳| 泸水县|