Подтвердить что ты не робот

Приращение целочисленной ценности int?

Как увеличить значение Integer в Java? Я знаю, что могу получить значение с помощью intValue, и я могу установить его с помощью нового Integer (int i).

playerID.intValue()++;

похоже, не работает.

Примечание. PlayerID - это целое число, которое было создано с помощью

Integer playerID = new Integer(1);
4b9b3361

Ответ 1

Integer объекты неизменяемы, поэтому вы не можете изменить значение после их создания. Вам нужно будет создать новый Integer и заменить существующий.

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

Ответ 2

Как говорит Гродригес, объекты Integer неизменяемы. Проблема здесь в том, что вы пытаетесь увеличить значение int идентификатора игрока, а не самого идентификатора. В Java 5+ вы можете просто написать playerID++.

В качестве побочного примечания никогда не называйте конструктор Integer. Воспользуйтесь автобоксированием, просто назначив int to Integer напрямую, например Integer foo = 5. Это будет использовать прозрачный Integer.valueOf(int), который превосходит конструктор, потому что он не всегда должен создавать новый объект.

Ответ 3

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);
}

Целое число само по себе остается неизменным.

Ответ 4

AtomicInteger

Может быть, это того стоит: есть класс Java под названием AtomicInteger.

В этом классе есть несколько полезных методов, таких как addAndGet(int delta) или incrementAndGet() (и их аналоги), которые позволяют увеличивать/уменьшать значение одного и того же экземпляра. Хотя класс предназначен для использования в контексте параллелизма, он также весьма полезен в других сценариях и, вероятно, соответствует вашим потребностям.

final AtomicInteger count = new AtomicInteger( 0 ) ;
…
count.incrementAndGet();  // Ignoring the return value. 

Ответ 5

Целочисленные объекты неизменяемы. Вы не можете изменить значение целого, удерживаемого самим объектом, но вы можете просто создать новый объект Integer для хранения результата:

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

Ответ 6

Для Java 7 оператор инкремента "++" работает с целыми. Ниже приведен пример тестирования

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

Ответ 7

Возможно, вы можете попробовать:

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

Ответ 8

Вы можете использовать IntHolder в качестве изменяемой альтернативы Integer. Но стоит ли это?

Ответ 9

Все примитивные объекты-обертки неизменны.

Возможно, я опаздываю на вопрос, но хочу добавить и уточнить, что когда вы делаете playerID++, то, что действительно происходит, выглядит примерно так:

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

Как видите, создан новый объект Integer.