2013-01-08 13 views
8

私は本当に混乱しているかもしれませんが、それは非常に簡単な質問ですが、Googleと公式のドキュメントでは不十分です。BigIntegerコピー

私はBigIntegerをコピーしたいのですが、私はそれを行うきれいな方法を見つけることができません。 BigInteger a = bbはBigIntegerのがオブジェクトであり、ここでのオーバーロードなしオペレータはありませんように私がこれまでに発見したクリーンな方法がBigInteger a = b.add(BigInteger.ZERO)で、b

と同じオブジェクトへのa参照BigIntegerのですが、まだ私のために汚い方法。これは可能ですが

+1

'のBigInteger A =新しいBigIntegerの(b)は'? – Jon

+7

'BigInteger'は不変です。コピーが必要な具体的な理由は何ですか? –

+0

それは不変です、なぜあなたはコピーが必要ですか? – Adam

答えて

9

BigIntegerは、このようなIntegerStringなどの他のラッパークラスのように不変です。変更や改ざんの可能性について心配はありません。

P.S:ボーナスとして、防御的なコピーが必要な場合のリンクを示します。

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

6

あなたはBigInteger(String val)

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

を使用することができ、BigIntegerオブジェクトがimmutableあると私はコピーする必要性を想像することはできません。

14

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

1

方法について:

BigInteger a = b.clone() 

しかし、必要はないはずですので、それは不変です述べたように。

3

まず、BigIntegerは不変クラスであるため、コピーする必要はありません。

BigIntegerをコピーすると、Stringを...コピーと同じくらい便利です)しかし、あなたは1をコピーする必要がある場合は、それを行うには、より効率的な方法は、このようになります:

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

このことを回避します(比較的)高価なバイナリ - >デシマル - >バイナリ変換と中間文字列の作成。

そしてBigInteger.clone()がより一層効率的でなければなりません...