如何在Java中增加Integer的值?我知道我可以用intValue获取值,我可以用新的Integer(int i)设置它。
playerID.intValue()++;
似乎不起作用。
注意:PlayerID是使用以下内容创建的整数:
Integer playerID = new Integer(1);
答案 0 :(得分:87)
Integer
个对象是不可变的,因此一旦创建它们就无法修改它。您需要创建一个新的Integer
并替换现有的。{/ p>
playerID = new Integer(playerID.intValue() + 1);
答案 1 :(得分:48)
正如Grodriguez所说,Integer
对象是不可变的。这里的问题是你试图增加玩家ID的int
值而不是ID本身。在Java 5+中,您只需编写playerID++
。
作为旁注,永远不要调用Integer
的构造函数。只需将int
直接分配给Integer
s,就像Integer foo = 5
一样,充分利用自动装箱功能。这将透明地使用Integer.valueOf(int)
,这比构造函数更优越,因为它并不总是需要创建一个新对象。
答案 2 :(得分:7)
整数对象是不可变的。您不能更改对象本身持有的整数的值,但您可以创建一个新的Integer对象来保存结果:
Integer start = new Integer(5);
Integer end = start + 5; // end == 10;
答案 3 :(得分:7)
也许这也有一些价值:有一个名为AtomicInteger
的Java类(参见https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html)。这个类有一些有用的方法,比如addAndGet(int delta)
或incrementAndGet()
(和它们的对应物),它们允许你增加/减少同一个实例的值。尽管该类被设计用于并发环境,但它在其他场景中也非常有用,可能符合您的需求。
答案 4 :(得分:6)
对于Java 7,增量运算符'++'适用于整数。以下是经过测试的示例
Integer i = new Integer( 12 );
System.out.println(i); //12
i = i++;
System.out.println(i); //13
答案 5 :(得分:6)
Java 7和8.增量DOES更改引用,因此它引用另一个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);
}
整数本身仍然是不可变的。
答案 6 :(得分:4)
也许你可以试试:
final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
答案 7 :(得分:3)
您可以使用IntHolder作为Integer的可变替代品。但它值得吗?
答案 8 :(得分:0)
所有原始包装器对象都是不可变的。
我可能迟到了这个问题,但我想补充并澄清一下,当您进行playerID++
时,真正发生的事情是这样的:
playerID = Integer.valueOf( playerID.intValue() + 1);
Integer.valueOf(int)将始终缓存-128至127(包括)范围内的值,并且可以缓存该范围之外的其他值。