Увеличить значение Int целого числа?
Как увеличить значение целого числа в Java? Я знаю, что могу получить значение с intValue, и я могу установить его с новым целым числом(int i).
playerID.intValue()++;
не работает.
Примечание: PlayerID-это целое число, которое было создано с:
Integer playerID = new Integer(1);
8 ответов:
Integer
объекты неизменяемы, поэтому вы не можете изменить значение после их создания. Вам нужно будет создать новыйInteger
и заменить существующий.playerID = new Integer(playerID.intValue() + 1);
как Grodriguez говорит:
Integer
объекты являются неизменными. Проблема здесь в том, что вы пытаетесь увеличитьint
значение идентификатора игрока, а не самого идентификатора. В Java 5+, Вы можете просто написатьplayerID++
.в качестве примечания, никогда не звоните 'ы. Воспользуйтесь автоупаковка, просто назначая
int
ьInteger
s непосредственно, как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); }
целое само по себе остается неизменным.