2010-09-28 14 views
58

मैं जावा में एक इंटेगर के मूल्य को कैसे बढ़ा सकता हूं? मुझे पता है कि मैं intValue के साथ मान प्राप्त कर सकता हूं, और मैं इसे नए इंटीजर (int i) के साथ सेट कर सकता हूं।एक इंटीजर के int मूल्य में वृद्धि?

playerID.intValue()++; 

काम नहीं कर रहा है।

नोट:

Integer playerID = new Integer(1); 
+7

आप इनट्स के बजाय इंटीग्रर्स का उपयोग क्यों कर रहे हैं? – naiad

+2

@naiad मेरे लिए यह आमतौर पर है क्योंकि आप जावा में जेनेरिक तर्क के रूप में आदिम प्रकारों का उपयोग नहीं कर सकते हैं। –

उत्तर

72

Integer वस्तुओं अपरिवर्तनीय हैं, तो आप मूल्य एक बार वे नहीं बनाई गई है संशोधित नहीं कर सकते: PlayerID एक पूर्णांक है कि के साथ बनाया गया है। आपको एक नया Integer बनाना होगा और मौजूदा को प्रतिस्थापित करना होगा।

playerID = new Integer(playerID.intValue() + 1); 
+2

यदि आपको एक गैर-आदिम int का उपयोग करना चाहिए, और आप उत्परिवर्तन चाहते हैं, तो आप कॉमन्स MutableInt http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/mutable/MutableInt.html को आजमा सकते हैं – Joel

+0

धन्यवाद, लेकिन किसी कारण से यह अभी भी वृद्धि नहीं कर रहा है। शायद यह मेरे कोड में एक बग है ... – William

+1

@ विलियम: जैसा कि मुझे पता है, यह केवल उस पद्धति में वृद्धि होगी जो इसे बढ़ाएगा। –

7

पूर्णांक वस्तुएं अपरिवर्तनीय हैं। आप पूर्णांक वस्तु अपने आप में आयोजित की मूल्य बदल सकते हैं नहीं है, लेकिन तुम सिर्फ परिणाम धारण करने के लिए एक नया पूर्णांक वस्तु बना सकते हैं:

Integer start = new Integer(5); 
Integer end = start + 5; // end == 10; 
3

आप पूर्णांक के रूप में अस्थायी विकल्प IntHolder उपयोग कर सकते हैं। लेकिन क्या यह लायक है?

42

जैसा कि ग्रोड्रिगेज कहते हैं, Integer ऑब्जेक्ट्स अपरिवर्तनीय हैं। यहां समस्या यह है कि आप आईडी के बजाए प्लेयर आईडी के int मान को बढ़ाने की कोशिश कर रहे हैं। जावा 5+ में, आप बस playerID++ लिख सकते हैं।

एक साइड नोट के रूप में, कभी भी Integer के कन्स्ट्रक्टर को कॉल न करें। Integer foo = 5 जैसे int से Integer एस को सीधे असाइन करके ऑटोबॉक्सिंग का लाभ उठाएं। यह Integer.valueOf(int) पारदर्शी रूप से उपयोग करेगा, जो कि कन्स्ट्रक्टर से बेहतर है क्योंकि इसे हमेशा एक नई वस्तु नहीं बनाना पड़ता है।

6

जावा 7 के लिए, इंटीग्रर्स पर वृद्धि ऑपरेटर '++' काम करता है। एक जावा वर्ग AtomicInteger कहा जाता है (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html देखें) है: नीचे एक परीक्षण किया उदाहरण

Integer i = new Integer(12); 
    System.out.println(i); //12 
    i = i++; 
    System.out.println(i); //13 
+1

लेकिन ध्यान रखें कि 'i = new Integer (12) 'के अन्य संदर्भ अभी भी' 12', '13'' को संदर्भित नहीं करेंगे ... इस – vikingsteve

+1

पर ट्रिप करने के लिए आसान है हाँ, आपको मूल्य को फिर से असाइन करना क्यों है पूर्णांक ऑब्जेक्ट में: i = i ++ – KillBill

+2

'i = i ++' 'i ++ 'जैसा नहीं है। तकनीकी रूप से, '++' वास्तव में पूर्णांक पर काम नहीं करता है, जिसे मैं कहूंगा क्योंकि आप इसका परिणाम किसी भी चीज़ को निर्दिष्ट किए बिना स्वयं नहीं कर सकते हैं। –

6

हो सकता है कि यह भी कुछ मूल्य का है। इस वर्ग में addAndGet(int delta) या incrementAndGet() (और उनके समकक्ष) जैसी कुछ उपयोगी विधियां हैं जो आपको एक ही उदाहरण के मान को बढ़ाने/घटाने की अनुमति देती हैं। यद्यपि कक्षा को समवर्ती संदर्भ के संदर्भ में उपयोग करने के लिए डिज़ाइन किया गया है, यह अन्य परिदृश्यों में भी काफी उपयोगी है और संभवतः आपकी आवश्यकता के अनुरूप है।

1

शायद तुम कोशिश कर सकते हैं:

final AtomicInteger i = new AtomicInteger(0); 
i.set(1); 
i.get(); 
3

जावा 7 और 8 वृद्धि करता संदर्भ बदलने के लिए, तो यह एक और पूर्णांक ऑब्जेक्ट के लिए संदर्भ देता है। देखो:

@Test 
public void incInteger() 
{ 
    Integer i = 5; 
    Integer iOrig = i; 
    ++i; // Same as i = i + 1; 
    Assert.assertEquals(6, i.intValue()); 
    Assert.assertNotEquals(iOrig, i); 
} 

स्वयं द्वारा पूर्णांक अभी भी अपरिवर्तनीय है।

संबंधित मुद्दे