Ответ 1
Integer
объекты неизменяемы, поэтому вы не можете изменить значение после их создания. Вам нужно будет создать новый Integer
и заменить существующий.
playerID = new Integer(playerID.intValue() + 1);
Как увеличить значение Integer в Java? Я знаю, что могу получить значение с помощью intValue, и я могу установить его с помощью нового Integer (int i).
playerID.intValue()++;
похоже, не работает.
Примечание. PlayerID - это целое число, которое было создано с помощью
Integer playerID = new Integer(1);
Integer
объекты неизменяемы, поэтому вы не можете изменить значение после их создания. Вам нужно будет создать новый Integer
и заменить существующий.
playerID = new Integer(playerID.intValue() + 1);
Как говорит Гродригес, объекты Integer
неизменяемы. Проблема здесь в том, что вы пытаетесь увеличить значение int
идентификатора игрока, а не самого идентификатора. В Java 5+ вы можете просто написать playerID++
.
В качестве побочного примечания никогда не называйте конструктор Integer
. Воспользуйтесь автобоксированием, просто назначив int
to Integer
напрямую, например Integer foo = 5
. Это будет использовать прозрачный Integer.valueOf(int)
, который превосходит конструктор, потому что он не всегда должен создавать новый объект.
Java 7 и 8. Инкремент ДЕЛАЕТ изменение ссылки, поэтому он ссылается на другой объект Integer. Посмотрите:
@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);
}
Целое число само по себе остается неизменным.
AtomicInteger
Может быть, это того стоит: есть класс Java под названием AtomicInteger
.
В этом классе есть несколько полезных методов, таких как addAndGet(int delta)
или incrementAndGet()
(и их аналоги), которые позволяют увеличивать/уменьшать значение одного и того же экземпляра. Хотя класс предназначен для использования в контексте параллелизма, он также весьма полезен в других сценариях и, вероятно, соответствует вашим потребностям.
final AtomicInteger count = new AtomicInteger( 0 ) ;
…
count.incrementAndGet(); // Ignoring the return value.
Целочисленные объекты неизменяемы. Вы не можете изменить значение целого, удерживаемого самим объектом, но вы можете просто создать новый объект Integer для хранения результата:
Integer start = new Integer(5);
Integer end = start + 5; // end == 10;
Для Java 7 оператор инкремента "++" работает с целыми. Ниже приведен пример тестирования
Integer i = new Integer( 12 );
System.out.println(i); //12
i = i++;
System.out.println(i); //13
Возможно, вы можете попробовать:
final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
Вы можете использовать IntHolder в качестве изменяемой альтернативы Integer. Но стоит ли это?
Все примитивные объекты-обертки неизменны.
Возможно, я опаздываю на вопрос, но хочу добавить и уточнить, что когда вы делаете playerID++
, то, что действительно происходит, выглядит примерно так:
playerID = new Integer( playerID.intValue() + 1);
Как видите, создан новый объект Integer.