Comment incrémenter la valeur d'un entier en Java? Je sais que je peux obtenir la valeur avec intValue et que je peux la définir avec le nouvel Integer (int i).
playerID.intValue()++;
ne semble pas fonctionner.
Remarque: PlayerID est un entier qui a été créé avec:
Integer playerID = new Integer(1);
Les objets Integer
étant immuables, vous ne pouvez pas modifier la valeur une fois qu'ils ont été créés. Vous devrez créer un nouveau Integer
et remplacer celui existant.
playerID = new Integer(playerID.intValue() + 1);
Comme le dit Grodriguez, les objets Integer
sont immuables. Le problème ici est que vous essayez d’incrémenter la valeur int
de l’ID du lecteur plutôt que l’ID lui-même. Dans Java 5+, vous pouvez simplement écrire playerID++
.
En passant, n'appelez jamais le constructeur de Integer
. Profitez de la sélection automatique en assignant simplement int
s à Integer
s directement, comme Integer foo = 5
. Ceci utilisera Integer.valueOf(int)
de manière transparente, ce qui est supérieur au constructeur car il n'est pas toujours nécessaire de créer un nouvel objet.
Les objets entiers sont immuables. Vous ne pouvez pas changer la valeur de l'entier détenu par l'objet lui-même, mais vous pouvez simplement créer un nouvel objet Integer pour contenir le résultat:
Integer start = new Integer(5);
Integer end = start + 5; // end == 10;
C’est peut-être aussi intéressant: il existe une classe Java appelée AtomicInteger
(voir https://docs.Oracle.com/javase/8/docs /api/Java/util/concurrent/atomic/AtomicInteger.html ). Cette classe a quelques méthodes utiles comme addAndGet(int delta)
ou incrementAndGet()
(et leurs contreparties) qui vous permettent de incrémenter/décrémenter la valeur de la même instance Bien que la classe soit conçue pour être utilisée dans le contexte de simultanéité, elle est également très utile dans d’autres scénarios et répond probablement à vos besoins.
Java 7 et 8. Incrément NE modifie pas la référence, donc il fait référence à un autre objet Integer. Regardez:
@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 par lui-même est toujours immuable.
Pour Java 7, l'opérateur d'incrémentation '++' fonctionne sur des entiers. Vous trouverez ci-dessous un exemple testé.
Integer i = new Integer( 12 );
System.out.println(i); //12
i = i++;
System.out.println(i); //13
Peut-être que vous pouvez essayer:
final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
Vous pouvez utiliser IntHolder comme alternative mutable à Integer. Mais ça vaut la peine?
Tous les objets wrapper primitifs sont immuables.
Je suis peut-être en retard par rapport à la question, mais je tiens à ajouter et à préciser que lorsque vous le ferez playerID++
, ce qui se passe réellement ressemble à ceci:
playerID = new Integer( playerID.intValue() + 1);
Comme vous pouvez le constater, un nouvel objet Integer est créé.