Java 原子整数递增
如果达到Java 原子整数递增,java,integer,Java,Integer,如果达到Integer.MAX\u值并递增,会发生什么情况 值回到零了吗?浏览源代码,他们只有一个 private volatile int value; 而且,在不同的地方,他们加上或减去,例如 public final int incrementAndGet() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next))
Integer.MAX\u值并递增,会发生什么情况
值回到零了吗?浏览源代码,他们只有一个
private volatile int value;
而且,在不同的地方,他们加上或减去,例如
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
因此,它应该遵循标准的Java整数数学,并环绕到integer.MIN_值。AtomicInteger的JavaDocs对这个问题没有提及(从我看到的情况来看),所以我猜这种行为在将来可能会改变,但这似乎极不可能
如果有帮助的话,还有一个原子链
另请参见由于
Integer.MIN\u值,它环绕:
System.out.println(new AtomicInteger(Integer.MAX_VALUE).incrementAndGet());
System.out.println(Integer.MIN_VALUE);
输出:
-2147483648
-2147483648
您可以通过将一个整数设置为最大值,然后将其递增来轻松尝试此操作。此问题为+1!我认为堆栈溢出的意义在于我们回答这样的问题,而不是让别人因为问这个问题而感到不舒服。问题不在于用户是否应该自己“弄明白”。他们当然需要帮助,我们在这里提供帮助。有时边缘案例数学运算的行为是未定义的,并且依赖于JVM,因此您必须阅读文档。这是一个很好的问题。