web-dev-qa-db-fra.com

Incrémenter la valeur int d'un entier?

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);
73
William

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);
90
Grodriguez

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 ints à Integers 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.

47
ColinD

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;
7
RHSeeger

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.

7
Vivit

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.

7
vitvlkv

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
6
samsamara

Peut-être que vous pouvez essayer:

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

Vous pouvez utiliser IntHolder comme alternative mutable à Integer. Mais ça vaut la peine?

3
Stan Kurilin

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éé.

0
hamza belmellouki