Wie erhöhe ich den Wert einer Ganzzahl in Java? Ich weiß, dass ich den Wert mit intValue abrufen und mit new Integer (int i) festlegen kann.
playerID.intValue()++;
scheint nicht zu funktionieren.
Hinweis: PlayerID ist eine Ganzzahl, die erstellt wurde mit:
Integer playerID = new Integer(1);
Antworten:
Integer
Objekte sind unveränderlich, daher können Sie den Wert nach ihrer Erstellung nicht mehr ändern. Sie müssen eine neue erstellenInteger
und die vorhandene ersetzen.quelle
Integer.valueOf(int)
... Ich mag die Idee, schlechte Praktiken überhaupt in Antworten zu verwenden, nicht, was dazu führen kann, dass die Leute denken, dass sie in Ordnung sind. Ich denke auch, dass es für das OP nützlich ist, zu erkennen, dass er Operationen, die er mit einemint
mit verwenden würde,Integer
auf die gleiche Weise verwenden kann.Wie Grodriguez sagt, sind
Integer
Objekte unveränderlich. Das Problem hierbei ist, dass Sie versuchen, denint
Wert der Spieler-ID und nicht die ID selbst zu erhöhen. In Java 5+ können Sie einfach schreibenplayerID++
.Rufen Sie niemals den
Integer
Konstruktor auf. Nutzen Sie den Vorteil von Autoboxing nur durch die Zuweisungint
sInteger
s direkt, wieInteger foo = 5
. Dies wirdInteger.valueOf(int)
transparent verwendet, was dem Konstruktor überlegen ist, da nicht immer ein neues Objekt erstellt werden muss.quelle
AtomicInteger
Vielleicht ist das auch etwas wert: Es gibt eine Java-Klasse namens
AtomicInteger
.Diese Klasse verfügt über einige nützliche Methoden wie
addAndGet(int delta)
oderincrementAndGet()
(und ihre Gegenstücke), mit denen Sie den Wert derselben Instanz erhöhen / verringern können. Obwohl die Klasse für die Verwendung im Kontext der Parallelität konzipiert ist , ist sie auch in anderen Szenarien sehr nützlich und entspricht wahrscheinlich Ihren Anforderungen.quelle
Java 7 und 8. Inkrement Ändert die Referenz, sodass auf ein anderes Integer-Objekt verwiesen wird. Aussehen:
Ganzzahl an sich ist immer noch unveränderlich.
quelle
++i
Funktion (auf Variablei
; beachten Sie, dass Sie auch geschrieben haben könnteni++
) und dieInteger
Klassenveränderlichkeit (auf VariableiOrig
) demonstriert . Die meisten anderen Antworten zeigen nur einen der beiden Begriffe.Ganzzahlige Objekte sind unveränderlich. Sie können den Wert der vom Objekt selbst gehaltenen Ganzzahl nicht ändern, aber Sie können einfach ein neues Ganzzahlobjekt erstellen, um das Ergebnis zu speichern:
quelle
Für Java 7 funktioniert der Inkrementoperator '++' für Ganzzahlen. Unten finden Sie ein getestetes Beispiel
quelle
i = new Integer(12)
immer noch verweisen12
, nicht13
... leicht zu stolperni = i++
ist nicht dasselbe wiei++
. Technisch gesehen++
funktioniert das bei Ganzzahlen nicht wirklich, würde ich sagen, da Sie es nicht alleine verwenden können, ohne das Ergebnis etwas zuzuweisen.Vielleicht können Sie versuchen:
quelle
Sie können IntHolder als veränderbare Alternative zu Integer verwenden. Aber lohnt es sich?
quelle
Alle primitiven Wrapper-Objekte sind unveränderlich.
Ich bin vielleicht zu spät bei der Frage, aber ich möchte hinzufügen und klarstellen, dass, wenn Sie dies tun
playerID++
, wirklich so etwas passiert:Integer.valueOf (int) speichert immer Werte im Bereich von -128 bis einschließlich 127 zwischen und kann andere Werte außerhalb dieses Bereichs zwischenspeichern.
quelle
playerID++
führt zu etwas ähnlichemplayerID = Integer.valueOf( playerID.intValue() + 1)
und gemäß den Dokumenten der Methode: Diese Methode speichert immer Werte im Bereich von -128 bis einschließlich 127 zwischen.