12

也许我真的很困惑,因为这似乎是一个非常简单的问题,但谷歌和官方文档还不够。

我想复制一个 BigInteger,但找不到干净的方法。BigInteger a = bwhenb是 BigInteger,因为 BigInteger 是一个对象,并且这里没有运算符重载,所以a引用相同的对象b

到目前为止我发现的最干净的方式是BigInteger a = b.add(BigInteger.ZERO),但对我来说仍然是一种肮脏的方式。

4

5 回答 5

15

BigInteger是不可变的——永远不需要复制BigInteger.

于 2013-01-08T01:19:18.177 回答
15

BigInteger与其他包装类(例如Integer和)一样是不可变的String。所以不用担心可能的更改/篡改。

PS:作为奖励,这里有一个关于何时需要防御性复制的链接。

http://www.javapractices.com/topic/TopicAction.do?Id=15

于 2013-01-08T01:33:38.920 回答
7

您可以使用BigInteger(String val)

BigInteger first = new BigInteger("15");
BigInteger second = new BigInteger(first.toString());

虽然这是可能的,但BigInteger对象是不可变的,我无法想象需要复制。

于 2013-01-08T01:15:26.910 回答
3

首先,您不需要复制 aBigInteger因为它是不可变的类。(复制 a与复制 a ...BigInteger一样有用)String

但是,如果您确实需要复制一个,那么一种更有效的方法是:

BigInteger first = new BigInteger(42);
BigInteger second = first.add(BigInteger.ZERO);

这避免了(相对)昂贵的二进制 -> 十进制 -> 二进制转换和中间字符串的创建。

而且BigInteger.clone()应该更有效率...

于 2013-01-08T01:31:35.603 回答
1

怎么样:

BigInteger a = b.clone()

但如前所述,它是不可变的,所以应该没有必要。

于 2013-01-08T01:19:45.783 回答