¿Cómo incremento el valor de un entero en Java? Sé que puedo obtener el valor con intValue, y puedo configurarlo con new Integer (int i).
playerID.intValue()++;
no parece funcionar.
Nota: PlayerID es un número entero que se ha creado con:
Integer playerID = new Integer(1);
Respuestas:
Integer
los objetos son inmutables, por lo que no puede modificar el valor una vez que se han creado. Deberá crear uno nuevoInteger
y reemplazar el existente.playerID = new Integer(playerID.intValue() + 1);
fuente
Integer.valueOf(int)
... No me gusta la idea de usar malas prácticas en las respuestas en absoluto, puede llevar a la gente a pensar que está bien hacerlo. También creo que es útil para el OP darse cuenta de que puede usar las operaciones que usaría con unint
withInteger
y de la misma manera.Como dice Grodriguez, los
Integer
objetos son inmutables. El problema aquí es que estás intentando incrementar elint
valor de la ID del jugador en lugar de la ID en sí. En Java 5+, puedes simplemente escribirplayerID++
.Como nota al margen, nunca llame
Integer
al constructor. Aproveche el autoboxing simplemente asignandoint
s aInteger
s directamente, comoInteger foo = 5
. Esto se usará de formaInteger.valueOf(int)
transparente, que es superior al constructor porque no siempre tiene que crear un nuevo objeto.fuente
Java 7 y 8. Increment SÍ cambia la referencia, por lo que hace referencia a otro objeto Integer. Mira:
@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); }
El entero por sí solo sigue siendo inmutable.
fuente
++i
función (en la variablei
; tenga en cuenta que también podría haber escritoi++
) y laInteger
inmutabilidad de la clase (en la variableiOrig
). La mayoría de las otras respuestas demuestran solo una de las dos nociones.AtomicInteger
Quizás esto también tenga algún valor: hay una clase Java llamada
AtomicInteger
.Esta clase tiene algunos métodos útiles como
addAndGet(int delta)
oincrementAndGet()
(y sus contrapartes) que le permiten incrementar / disminuir el valor de la misma instancia. Aunque la clase está diseñada para usarse en el contexto de concurrencia , también es bastante útil en otros escenarios y probablemente se ajuste a sus necesidades.final AtomicInteger count = new AtomicInteger( 0 ) ; … count.incrementAndGet(); // Ignoring the return value.
fuente
Los objetos enteros son inmutables. No puede cambiar el valor del entero que tiene el objeto en sí, pero puede crear un nuevo objeto Integer para contener el resultado:
Integer start = new Integer(5); Integer end = start + 5; // end == 10;
fuente
Para Java 7, el operador de incremento '++' funciona en Integers. A continuación se muestra un ejemplo probado
Integer i = new Integer( 12 ); System.out.println(i); //12 i = i++; System.out.println(i); //13
fuente
i = new Integer(12)
todavía se referirán a12
, no13
... es fácil tropezarse con estai = i++
no es lo mismo quei++
. Técnicamente,++
yo diría que no funciona en números enteros, ya que no se puede usar por sí solo sin asignar el resultado a algo.Quizás puedas intentar:
final AtomicInteger i = new AtomicInteger(0); i.set(1); i.get();
fuente
Puede usar IntHolder como alternativa mutable a Integer. ¿Pero vale la pena?
fuente
Todos los objetos envoltorios primitivos son inmutables.
Quizás llegué tarde a la pregunta, pero quiero agregar y aclarar que cuando lo hace
playerID++
, lo que realmente sucede es algo como esto:playerID = Integer.valueOf( playerID.intValue() + 1);
Integer.valueOf (int) siempre almacenará en caché los valores en el rango de -128 a 127, inclusive, y puede almacenar en caché otros valores fuera de este rango.
fuente
playerID++
da como resultado algo similarplayerID = Integer.valueOf( playerID.intValue() + 1)
y de acuerdo con los documentos del método: este método siempre almacenará en caché los valores en el rango de -128 a 127, inclusive.