
这是已知现象,正常。
Java的int的范围是 Integer.MIN_VALUE(-2^31) 到 Integer.MAX_VALUE(2^31-1)。-Integer.MIN_VALUE 的值大于 Integer.MAX_VALUE ,无法正确被Java的int表示。
而 -Integer.MIN_VALUE 在32位的范围内的补码表现形式正好跟 Integer.MIN_VALUE 一样,所以题主就看到了这样的行为。这是固定宽度的补码整型算术的很直观的结果…
附上规范:

这是已知现象,正常。
Java的int的范围是 Integer.MIN_VALUE(-2^31) 到 Integer.MAX_VALUE(2^31-1)。-Integer.MIN_VALUE 的值大于 Integer.MAX_VALUE ,无法正确被Java的int表示。
而 -Integer.MIN_VALUE 在32位的范围内的补码表现形式正好跟 Integer.MIN_VALUE 一样,所以题主就看到了这样的行为。这是固定宽度的补码整型算术的很直观的结果…
附上规范: