Increment a Integer's int value?

JavaClassIntegerInt

Java Problem Overview


How do I increment a Integer's value in Java? I know I can get the value with intValue, and I can set it with new Integer(int i).

playerID.intValue()++;

does not seem to work.

Note: PlayerID is a Integer that has been created with:

Integer playerID = new Integer(1);

Java Solutions


Solution 1 - Java

Integer objects are immutable, so you cannot modify the value once they have been created. You will need to create a new Integer and replace the existing one.

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

Solution 2 - Java

As Grodriguez says, Integer objects are immutable. The problem here is that you're trying to increment the int value of the player ID rather than the ID itself. In Java 5+, you can just write playerID++.

As a side note, never ever call Integer's constructor. Take advantage of autoboxing by just assigning ints to Integers directly, like Integer foo = 5. This will use Integer.valueOf(int) transparently, which is superior to the constructor because it doesn't always have to create a new object.

Solution 3 - Java

Java 7 and 8. Increment DOES change the reference, so it references to another Integer object. Look:

@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);
}

Integer by itself is still immutable.

Solution 4 - Java

AtomicInteger

Maybe this is of some worth also: there is a Java class called AtomicInteger.

This class has some useful methods like addAndGet(int delta) or incrementAndGet() (and their counterparts) which allow you to increment/decrement the value of the same instance. Though the class is designed to be used in the context of concurrency, it's also quite useful in other scenarios and probably fits your need.

final AtomicInteger count = new AtomicInteger( 0 ) ;
…
count.incrementAndGet();  // Ignoring the return value. 

Solution 5 - Java

Integer objects are immutable. You can't change the value of the integer held by the object itself, but you can just create a new Integer object to hold the result:

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

Solution 6 - Java

For Java 7, increment operator '++' works on Integers. Below is a tested example

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

Solution 7 - Java

Maybe you can try:

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

Solution 8 - Java

You can use IntHolder as mutable alternative to Integer. But does it worth?

Solution 9 - Java

All the primitive wrapper objects are immutable.

I'm maybe late to the question but I want to add and clarify that when you do playerID++, what really happens is something like this:

playerID = Integer.valueOf( playerID.intValue() + 1);

Integer.valueOf(int) will always cache values in the range -128 to 127, inclusive, and may cache other values outside of this range.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWilliamView Question on Stackoverflow
Solution 1 - JavaGrodriguezView Answer on Stackoverflow
Solution 2 - JavaColinDView Answer on Stackoverflow
Solution 3 - JavavitvlkvView Answer on Stackoverflow
Solution 4 - JavaVivitView Answer on Stackoverflow
Solution 5 - JavaRHSeegerView Answer on Stackoverflow
Solution 6 - JavasamsamaraView Answer on Stackoverflow
Solution 7 - JavafantouchView Answer on Stackoverflow
Solution 8 - JavaStan KurilinView Answer on Stackoverflow
Solution 9 - JavaHamza BelmelloukiView Answer on Stackoverflow