Cosa succede se AtomicInteger
raggiunge Integer.MAX_VALUE
e viene incrementato?Incremento di AtomicInteger
Il valore torna a zero?
Cosa succede se AtomicInteger
raggiunge Integer.MAX_VALUE
e viene incrementato?Incremento di AtomicInteger
Il valore torna a zero?
Guardate voi stessi:
System.out.println(new AtomicInteger(Integer.MAX_VALUE).incrementAndGet());
System.out.println(Integer.MIN_VALUE);
uscita:
-2147483648
-2147483648
sembra che fa involucro a MIN_VALUE.
browing il codice sorgente, hanno appena un
private volatile int value;
e, e vari luoghi, aggiungere o sottrarre da esso, ad esempio in
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
Così dovrebbe seguire la matematica Java intero standard ed avvolgere intorno al Integer.MIN_VALUE. I JavaDocs per AtomicInteger sono silenziosi sull'argomento (da quello che ho visto), quindi suppongo che questo comportamento potrebbe cambiare in futuro, ma ciò sembra estremamente improbabile.
C'è un AtomicLong se questo sarebbe di aiuto.
vedi anche What happens when you increment an integer beyond its max value?
È possibile provare facilmente questo impostando un numero intero sul valore massimo e quindi incrementandolo. – Gabe
null non è un numero nativo –
+1 per questa domanda! Penso che il punto di overflow dello Stack sia per noi rispondere a domande come questa e non far sentire male qualcuno per aver fatto la domanda. Il punto non è se un utente debba essere in grado di "capirlo" o meno. Hanno legittimamente bisogno di aiuto e noi siamo qui per fornirlo. –