2010-09-28 16 views
58

Come si incrementa il valore di un numero intero in Java? So che posso ottenere il valore con intValue e posso impostarlo con il nuovo numero intero (int i).Incrementa il valore int di un numero intero?

playerID.intValue()++; 

non sembra funzionare.

Nota: playerid è un numero intero che è stato creato con:

Integer playerID = new Integer(1); 
+7

Perché stai utilizzando i numeri interi anziché gli interi? – naiad

+2

@naiad Per me di solito è perché non puoi usare i tipi primitivi come argomenti generici in Java. –

risposta

72

Integer oggetti sono immutabili, quindi non è possibile modificare il valore di una volta che sono stati creati. Dovrai creare un nuovo Integer e sostituire quello esistente.

playerID = new Integer(playerID.intValue() + 1); 
+2

Se è necessario utilizzare un int non primitivo e si desidera la mutabilità, è possibile provare commons MutableInt http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/mutable/MutableInt.html – Joel

+0

grazie, ma per qualche motivo non sta ancora aumentando. Forse è un bug nel mio codice ... – William

+1

@William: Come so, verrà incrementato solo nel metodo che lo incrementa. –

7

Gli oggetti interi sono immutabili. Non è possibile modificare il valore del numero intero detenuta da l'oggetto stesso, ma si può solo creare un nuovo oggetto Integer per contenere il risultato:

Integer start = new Integer(5); 
Integer end = start + 5; // end == 10; 
3

È possibile utilizzare IntHolder alternativa come mutabile a Integer. Ma vale la pena?

42

Come dice Grodriguez, gli oggetti Integer sono immutabili. Il problema qui è che stai cercando di incrementare il valore int dell'ID giocatore piuttosto che l'ID stesso. In Java 5+, puoi semplicemente scrivere playerID++.

Come nota a margine, non chiamare mai il costruttore di Integer. Approfitta dell'autoboxing semplicemente assegnando int s a Integer s direttamente, come Integer foo = 5. Questo utilizzerà Integer.valueOf(int) in modo trasparente, che è superiore al costruttore perché non deve sempre creare un nuovo oggetto.

6

Per Java 7, l'operatore di incremento '++' funziona su Integers. Qui di seguito è un esempio testato

Integer i = new Integer(12); 
    System.out.println(i); //12 
    i = i++; 
    System.out.println(i); //13 
+1

Ma sappi che altri riferimenti a 'i = new Integer (12)' faranno comunque riferimento a '12', non' 13' ... facile da ottenere su questo uno – vikingsteve

+1

sì, ecco perché devi riassegnare il valore all'oggetto intero: i = i ++ – KillBill

+2

'i = i ++' non è lo stesso di 'i ++'. Tecnicamente, '++' non funziona su interi, direi che non puoi usarlo da solo senza assegnare il risultato a qualcosa. –

6

Forse questo è di un certo valore anche: c'è una classe Java chiamata AtomicInteger (vedi https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html). Questa classe ha alcuni metodi utili come addAndGet(int delta) o incrementAndGet() (e le loro controparti) che consentono di incrementare/decrementare il valore della stessa istanza. Sebbene la classe sia progettata per essere utilizzata nel contesto della concorrenza, è anche abbastanza utile in altri scenari e probabilmente si adatta alle tue necessità.

1

forse si può provare:

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

Java 7 e 8. Incremento non cambia il riferimento, in modo da fa riferimento ad un altro oggetto Integer. Guarda:

@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 di per sé è ancora immutabile.

Problemi correlati