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