2013-01-08 16 views
8

शायद मैं वास्तव में उलझन में हूं क्योंकि यह एक बहुत ही सरल सवाल प्रतीत होता है लेकिन Google और आधिकारिक दस्तावेज पर्याप्त नहीं थे।बिगइंटर कॉपी

मैं एक बिगइंटर की प्रतिलिपि बनाना चाहता हूं, और मुझे इसे करने का एक साफ तरीका नहीं मिल रहा है। BigInteger a = b जब b, एक BigInteger है के रूप में BigInteger एक वस्तु मेरे लिए एक गंदा तरीका है और वहाँ कोई ऑपरेटर यहां अधिक भार, के रूप में b

एक ही वस्तु के लिए a संदर्भ स्पष्ट तरीका मैं अब तक मिल गया है BigInteger a = b.add(BigInteger.ZERO) है, लेकिन अभी भी ।

+1

'BigInteger एक = नए BigInteger (ख)'? – Jon

+7

'बिगइंटर' अपरिवर्तनीय है। प्रतिलिपि की आवश्यकता के लिए कोई विशिष्ट कारण? –

+0

यह अपरिवर्तनीय है, आपको एक प्रति की आवश्यकता क्यों है? – Adam

उत्तर

9

BigInteger ऐसे Integer और String के रूप में अन्य आवरण वर्गों की तरह अडिग है। तो संभावित परिवर्तन/छेड़छाड़ के बारे में कोई चिंता नहीं है।

पीएस: बोनस के रूप में, यहां एक लिंक है जब रक्षात्मक प्रतिलिपि की आवश्यकता होती है।

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 को कॉपी के रूप में के बारे में रूप में उपयोगी है ...)

लेकिन तुम तो ऐसा करने के लिए यह इस होगा का सबसे प्रभावशाली तरीका एक, कॉपी करने की आवश्यकता है, तो:

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

इस से बचा जाता है (अपेक्षाकृत) महंगा द्विआधारी -> दशमलव -> बाइनरी रूपांतरण और मध्यवर्ती स्ट्रिंग का निर्माण।

और BigInteger.clone() अभी भी और अधिक कुशल होना चाहिए ...