12

非常に単純な質問のように思えるので、私は本当に混乱しているのかもしれませんが、Google と公式ドキュメントでは十分ではありませんでした。

BigInteger をコピーしたいのですが、きれいな方法が見つかりません。BigInteger a = bが BigInteger である場合b、BigInteger はオブジェクトであり、ここでオーバーロードする演算子がないaため、同じオブジェクトへの参照b

これまでに見つけた最もクリーンな方法は ですBigInteger a = b.add(BigInteger.ZERO)が、それでも私にとっては汚い方法です。

4

5 に答える 5

15

BigIntegerIntegerやなどの他のラッパー クラスと同様に不変Stringです。したがって、改ざん/改ざんの心配はありません。

PS: おまけとして、防御コピーが必要な場合のリンクを次に示します。

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

于 2013-01-08T01:33:38.920 に答える
15

BigIntegerは不変です。.a をコピーする必要はありませんBigInteger

于 2013-01-08T01:19:18.177 に答える
7

使用できますBigInteger(String val)

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

これは可能ですが、BigIntegerオブジェクトは不変であり、コピーする必要があるとは想像できません。

于 2013-01-08T01:15:26.910 に答える
3

BigIntegerまず、 aは不変クラスであるため、コピーする必要はありません。( a をコピーするBigIntegerことは、 a ... をコピーするのと同じくらい便利Stringです)

ただし、コピーする必要がある場合、より効率的な方法は次のとおりです。

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

これにより、(比較的) 高価な 2 進数 -> 10 進数 -> 2 進数の変換と、中間文字列の作成が回避されます。

そしてBigInteger.clone()、さらに効率的なはずです...

于 2013-01-08T01:31:35.603 に答える
1

どうですか:

BigInteger a = b.clone()

しかし、前述のように不変であるため、必要はありません。

于 2013-01-08T01:19:45.783 に答える