2010-09-28 3 views
58

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

playerID.intValue()++; 

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

Примечание: PlayerID является Integer, который был создан с:

Integer playerID = new Integer(1); 
+7

Почему вы используете целые числа вместо ints? – naiad

+2

@naiad Для меня это обычно потому, что вы не можете использовать примитивные типы в качестве общих аргументов в Java. –

ответ

72

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

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

Если вы должны использовать не-примитивный int, и вы хотите изменчивость, вы можете попробовать commons MutableInt http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/mutable/MutableInt.html – Joel

+0

спасибо, но по какой-то причине он по-прежнему не увеличивается. Может быть, это ошибка в моем коде ... – William

+1

@William: Как я знаю, он будет увеличиваться только в методе, который увеличивает его. –

7

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

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

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

42

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

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

6

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

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

Но имейте в виду, что другие ссылки на 'i = new Integer (12)' будут по-прежнему ссылаться на '12', а не' 13' ... легко разобраться на этом – vikingsteve

+1

да, поэтому вам нужно переназначить значение к целочисленному объекту: i = i ++ – KillBill

+2

'i = i ++' не совпадает с 'i ++'. С технической точки зрения, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' на самом деле не работает на целые числа, которые я бы сказал, –

6

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

1

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

final AtomicInteger i = new AtomicInteger(0); 
i.set(1); 
i.get(); 
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); 
} 

Целое само по себе по-прежнему неизменено.

Смежные вопросы