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,因此您必须阅读文档。这是一个很好的问题。