Увеличить значение Int целого числа?


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

playerID.intValue()++;

не работает.

Примечание: PlayerID-это целое число, которое было создано с:

Integer playerID = new Integer(1);
8 64

8 ответов:

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

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

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

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

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

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

может быть, это тоже стоит: есть класс Java под названием AtomicInteger (см. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html). Этот класс имеет некоторые полезные методы, такие как addAndGet(int delta) или incrementAndGet() (и их аналоги), которые позволяют увеличивать/уменьшать значение одного и того же экземпляра. Хотя класс предназначен для использования в контексте параллелизма, он также весьма полезен в других сценариях и, вероятно, подходит для вашего необходимость.

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

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

Java 7 и 8. Инкремент изменяет ссылку, поэтому он ссылается на другой целочисленный объект. Смотри:

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

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

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

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

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