购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

陷阱11

不得不防
——不可变的整数运算

在Java中对于较大整数值的运算,可以使用BigInteger类来实现,该类代表不可变的任意精度的整数,并且提供了与算术运算对应的方法,可以实现较大整数的运算,如add方法就与算术运算中的加法运算相对应。

注 意

在使用BigInteger类进行运算时,并不是改变当前BigInteger类的实例值,比如有两个BigInteger实例x和y,当x调用add方法与y相加时,可以通过语句x.add(y)来实现,但是该语句执行后,程序并没有改变变量x的值,而是整个语句x.add(y)的值才是x加上y的和,这也是很多程序员使用该类容易发生的错误,因为语句x.add(y)并不代表语句x=x+y,而是代表表达式x+y。

示例:

说 明

运行本示例,程序将输出“2500”,这个值并不是x与y的和“3000”,因此通过该示例应该明白,当执行语句x.add(y)时并不能改变x的值,因为BigInteger类是不可变的任意精度的整数,所以不能通过语句x.add(y)改变x的值,但是语句x.add(y)返回的值却是x与y的和,因此可以再声明一个BigInteger对象sum,并将语句x.add(y)的返回值赋值给sum,这样,sum的值就是“3000”了。

下面的示例对前一个示例做了改进,使用其能够正确计算出x与y的和,并输出它们的和 3000。

示例:

说 明

运行本示例,程序输出了“3000”,这也充分说明了通过x.add(y)可以计算x与y的和,但是并不能改变x的值,因此在使用BigInteger类时一定要特别小心,尤其是用于商业用途时更应小心谨慎,不要试图通过该类来改变自身的值,因为这样的改变会失败,如前一个示例试图改变x的值时并没有成功,因此该类如果使用不当就会造成巨大的损失。 SaegLEXL/D7mkTiObaHOtcPY3N+ncsP5D0gIXCGejm9h3XRRImn0nwSOz8JSKO2a

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开