Увеличить значение типа Integer? - PullRequest
72 голосов
/ 28 сентября 2010

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

playerID.intValue()++;

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

Примечание: PlayerID является целым числомкоторый был создан с помощью:

Integer playerID = new Integer(1);

Ответы [ 8 ]

88 голосов
/ 28 сентября 2010

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

playerID = new Integer(playerID.intValue() + 1);
47 голосов
/ 28 сентября 2010

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

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

7 голосов
/ 29 января 2018

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

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

7 голосов
/ 18 февраля 2016

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

7 голосов
/ 28 сентября 2010

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

6 голосов
/ 16 марта 2015

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

    Integer i = new Integer( 12 );
    System.out.println(i); //12
    i = i++;
    System.out.println(i); //13
4 голосов
/ 11 июля 2017

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

final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
3 голосов
/ 28 сентября 2010

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

...