Jak zwiększyć wartość liczby całkowitej w języku Java? Wiem, że mogę uzyskać wartość za pomocą intValue i mogę ustawić ją za pomocą nowej wartości Integer (int i).
playerID.intValue()++;
nie wydaje się działać.
Uwaga: PlayerID to liczba całkowita utworzona za pomocą:
Integer playerID = new Integer(1);
Odpowiedzi:
Integer
obiekty są niezmienne, więc nie można modyfikować ich wartości po ich utworzeniu. Będziesz musiał utworzyć nowyInteger
i zastąpić istniejący.playerID = new Integer(playerID.intValue() + 1);
źródło
Integer.valueOf(int)
... Nie podoba mi się pomysł używania złych praktyk w odpowiedziach, może to prowadzić do tego, że ludzie myślą, że są w porządku. Myślę też, że to przydatne dla PO sobie sprawę, że może on wykorzystać operacje że on użytku zint
ze związkiemInteger
w ten sam sposób.Jak mówi Grodriguez,
Integer
przedmioty są niezmienne. Problem polega na tym, że próbujesz zwiększyćint
wartość identyfikatora gracza, a nie samego identyfikatora. W Javie 5+ możesz po prostu pisaćplayerID++
.Na marginesie, nigdy przenigdy nie dzwoń
Integer
do konstruktora. Skorzystaj z autoboxingu, przypisującint
s doInteger
s bezpośrednio s, na przykładInteger foo = 5
. Będzie to używać w sposóbInteger.valueOf(int)
przezroczysty, co jest lepsze od konstruktora, ponieważ nie zawsze musi tworzyć nowy obiekt.źródło
AtomicInteger
Może to też jest warte: istnieje klasa Java o nazwie
AtomicInteger
.Ta klasa ma kilka przydatnych metod, takich jak
addAndGet(int delta)
orincrementAndGet()
(i ich odpowiedniki), które umożliwiają zwiększanie / zmniejszanie wartości tej samej instancji. Chociaż klasa została zaprojektowana do użytku w kontekście współbieżności , jest również przydatna w innych scenariuszach i prawdopodobnie pasuje do Twoich potrzeb.final AtomicInteger count = new AtomicInteger( 0 ) ; … count.incrementAndGet(); // Ignoring the return value.
źródło
Java 7 i 8. Przyrost powoduje zmianę odwołania, więc odwołuje się do innego obiektu typu Integer. Popatrz:
@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); }
Sama liczba całkowita jest nadal niezmienna.
źródło
++i
funkcję (na zmienneji
; zauważ, że mogłeś również napisaći++
) iInteger
niezmienność klasy (na zmiennejiOrig
). Większość innych odpowiedzi przedstawia tylko jedno z dwóch pojęć.Obiekty całkowite są niezmienne. Nie możesz zmienić wartości liczby całkowitej przechowywanej przez sam obiekt, ale możesz po prostu utworzyć nowy obiekt Integer, aby przechowywać wynik:
Integer start = new Integer(5); Integer end = start + 5; // end == 10;
źródło
W Javie 7 operator przyrostu „++” działa na liczbach całkowitych. Poniżej znajduje się sprawdzony przykład
Integer i = new Integer( 12 ); System.out.println(i); //12 i = i++; System.out.println(i); //13
źródło
i = new Integer(12)
nadal będą odnosić się do12
, a nie13
... łatwo się o toi = i++
to nie to samo coi++
. Technicznie rzecz biorąc,++
tak naprawdę nie działa na liczbach całkowitych, powiedziałbym, że nie możesz go używać samodzielnie bez przypisania czemuś wyniku.Może możesz spróbować:
final AtomicInteger i = new AtomicInteger(0); i.set(1); i.get();
źródło
Możesz użyć IntHolder jako zmiennej alternatywy dla Integer. Ale czy warto?
źródło
Wszystkie prymitywne obiekty opakowania są niezmienne.
Być może spóźniłem się z pytaniem, ale chcę dodać i wyjaśnić, że kiedy to zrobisz
playerID++
, tak naprawdę dzieje się tak:playerID = Integer.valueOf( playerID.intValue() + 1);
Integer.valueOf (int) zawsze buforuje wartości z zakresu od -128 do 127 włącznie i może buforować inne wartości spoza tego zakresu.
źródło
playerID++
daje w wyniku coś podobnegoplayerID = Integer.valueOf( playerID.intValue() + 1)
i zgodnie z dokumentacją metody: Ta metoda zawsze buforuje wartości z zakresu od -128 do 127 włącznie.