Pra*_*mar 7 java biginteger immutability
在java中,BigInteger是不可变的,但我想理解为什么,因为很多时候它被用来做很多可以产生很多对象的计算.所以,不要让它变得不可变,感觉有点直观.我想到的情况就是字符串操作,然后是StringBuilder的选项.应该有BigInteger的非永久性对应物吗?我认为在很多情况下这可能是有益的.
编辑:我知道不变性的好处以及它在许多情况下是如何有益的.我只是想了解BigInteger带来的好处.我用BigInteger来计算大数的阶乘.所以,我更喜欢可变的BigInteger.类似地,BigInteger将用于计算,其结果远大于int.对于其他情况,有BigDecimal.
Mic*_*nic 13
Josh Bloch的有效Java解释了不可变类的好处,在"第15项:最小化可变性"中:
不可变类比可变类更容易设计,实现和使用.它们不容易出错并且更安全.
不可变对象很简单,因为对象只能存在于一个状态 - 它创建的状态.简单代码往往具有更少的错误.由于无法修改对象,因此在没有外部同步的情况下也是线程安全的.
Bloch使用不可变类来解决性能问题,BigInteger例如:
不可变类的唯一真正缺点是它们需要为每个不同的值分别使用一个对象.创建这些对象可能成本很高,尤其是在它们很大的情况下.[...]
在内部,不可变类可以任意聪明.例如,BigInteger有一个包私有的可变"伴侣类",它用于加速多步操作,例如模幂运算.由于前面提到的所有原因,使用可变伴随类比使用BigInteger要困难得多,但幸运的是你不必:BigInteger的实现者为你做了艰苦的工作.
所以在内部,BigInteger已经为您做了一些优化.如果你真的想要一个可变的BigInteger,你可以使用a BitSet,但请注意,这可能会使你的代码更复杂 - 而且更容易出错.您应该使用最简单的解决方案(BigInteger),除非您确信使用可变版本会给您带来明显的性能提升(另请参阅同一本书中的"项目55:明智地优化").
| 归档时间: |
|
| 查看次数: |
4056 次 |
| 最近记录: |