2013-01-08 14 views
8

Forse sono davvero confuso perché sembra una domanda molto semplice ma Google e la documentazione ufficiale non sono stati sufficienti.BigInteger copia

Voglio copiare un BigInteger e non riesco a trovare un modo pulito per farlo. BigInteger a = b quando b è un BigInteger, come BigInteger è un oggetto e non c'è l'overloading degli operatori qui, a riferimenti allo stesso oggetto come b

il modo più pulito che ho trovato finora è BigInteger a = b.add(BigInteger.ZERO), ma ancora un modo sporco per me .

+1

'BigInteger a = new BigInteger (b)'? – Jon

+7

'BigInteger' è immutabile. Qualche ragione specifica per aver bisogno di una copia? –

+0

È immutabile, perché hai bisogno di una copia? – Adam

risposta

9

BigInteger è immutabile come le altre classi wrapper, come Integer e String. Quindi non preoccuparti di possibili alterazioni/manomissioni.

P.S: Come bonus, ecco un collegamento su quando è necessaria la copia difensiva.

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

6

È possibile utilizzare BigInteger(String val)

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

Anche se questo è possibile, BigInteger oggetti sono immutable e non riesco a immaginare una necessità di copiare.

14

BigInteger è immutabile - non dovrebbe mai essere necessario copiare un BigInteger.

1

ne dite:

BigInteger a = b.clone() 

Ma, come accennato è immutabile quindi non ci dovrebbe essere bisogno.

3

In primo luogo, non è necessario copiare un BigInteger perché è una classe immutabile. (Copia di un BigInteger è quanto di più utile come la copia di un String ...)

Ma se si ha bisogno di copiare uno, poi un modo più efficiente per farlo sarebbe questo:

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

questo evita il (relativamente) costoso binario -> decimale -> conversioni binarie e la creazione di una stringa intermedia.

E BigInteger.clone() dovrebbe essere più efficiente ancora ...

Problemi correlati