BigInteger不变的替代方案/解决方法

时间:2018-10-27 18:53:08

标签: java

在我的游戏中,您有钱。货币值存储在类型long的变量中。 问题在于此变量最大值不够。 所以我想将其更改为BigInteger,但这是一个不可变的类 而且我需要在同一位置存储和更新此值。

还有像BigInteger这样的不可变的类吗?

2 个答案:

答案 0 :(得分:3)

您可以为此目的使用BigInteger,但我不了解不变性如何影响用例。

您可以对BigInteger进行所有操作。例如:

BigInteger a = BigInteger.valueOf(100);
a = a.add(BigInteger.valueOf(200));
BigInteger b = a.multiply(BigInteger.valueOf(2));

由于不变性而发生的唯一变化是,每次拥有一个值时都需要创建一个新对象,但是可以用该值覆盖当前对象。此外,在多线程情况下,不变性不太容易出错。

答案 1 :(得分:0)

默认情况下,Java没有存储大于long值的数据类型(关键字)。

有一个对象类型,您可以存储任意多的值-只要系统的RAM可以处理它,那就是BigInteger和BigDecimal。

不幸的是,没有类似于BigInteger的内置类,它不是不可变的。更改BigInteger对象中的值的唯一方法是重新分配它,这意味着每次您想更改该值时都创建一个实例。

但是,如果您在短时间内多次更改该值,则可能会降低性能。您可以创建一个String变量,如果有更改,可以重新分配它,然后最后可以重新分配BigInteger对象。

简短回答,不。