如果将数字增加到最大值之后,Java不会抛出错误。如果您希望具有此行为,则可以使用Math.addExact(long x, long y)
Java 8中的方法。ArithmeticException
如果传递,则该方法将引发Long.MAX_VALUE
。
Java不会引发异常并且您收到负数的原因与数字的存储方式有关。对于长原语,第一个字节用于指示数字的符号(0->正号,1->负号),其余字节用于数字值。这意味着Long.MAX_VALUE
最大的正值将被存储为01111 … 111(0后跟63的1位)。由于向其添加数字,Long.MAX_VALUE
由于符号字节变为1,因此您将开始接收负整数。这意味着您有数字溢出,但是Java不会引发此错误。