[英]Increment a Integer's int value?
如何增加 Java 中的整数值? 我知道我可以用 intValue 获取值,我可以用 new Integer(int i) 设置它。
playerID.intValue()++;
似乎不起作用。
注意:PlayerID 是 Integer,创建时使用:
Integer playerID = new Integer(1);
Integer
对象是不可变的,因此一旦创建它们就不能修改其值。 您将需要创建一个新的Integer
并替换现有的Integer
。
playerID = new Integer(playerID.intValue() + 1);
正如 Grodriguez 所说, Integer
对象是不可变的。 这里的问题是您试图增加玩家 ID 的int
值而不是 ID 本身。 在 Java 5+ 中,您可以只编写playerID++
。
作为旁注,永远不要调用Integer
的构造函数。 通过直接将int
s 分配给Integer
s 来利用自动装箱,例如Integer foo = 5
。 这将透明地使用Integer.valueOf(int)
,这优于构造函数,因为它并不总是必须创建一个新对象。
Java 7 和 8. Increment 确实会更改引用,因此它引用了另一个 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);
}
Integer 本身仍然是不可变的。
AtomicInteger
也许这也有一些价值:有一个名为AtomicInteger
的 Java 类。
此类有一些有用的方法,例如addAndGet(int delta)
或incrementAndGet()
(以及它们的对应方法),它们允许您递增/递减同一实例的值。 尽管该类旨在用于concurrency的上下文中,但它在其他场景中也非常有用,并且可能适合您的需要。
final AtomicInteger count = new AtomicInteger( 0 ) ;
…
count.incrementAndGet(); // Ignoring the return value.
整数对象是不可变的。 你不能改变对象本身持有的整数的值,但你可以创建一个新的 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
也许你可以试试:
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(含)范围内的值,并且可能缓存此范围之外的其他值。
Java 8之后,我们可以如下使用
import java.lang.Math;
Math.incrementExact(playerID);
//it increment the integer value to + 1. It is also available for long
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.