递增整数的int值?

时间:2010-09-28 16:57:59

标签: java class integer int

如何在Java中增加Integer的值?我知道我可以用intValue获取值,我可以用新的Integer(int i)设置它。

playerID.intValue()++;

似乎不起作用。

注意:PlayerID是使用以下内容创建的整数:

Integer playerID = new Integer(1);

9 个答案:

答案 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(包括)范围内的值,并且可以缓存该范围之外的其他值。