负数取绝对值结果不一定是正数

负数取绝对值结果不一定是正数

在Java中,对负数取绝对值时,使用 Math.abs() 方法可能会得到一个负数的情况。这是因为 int 的取值范围是从 -2^31(2^31) - 1,即 -21474836482147483647。当要取绝对值的数字是 -2147483648 时,其绝对值为 2147483648,但超过了 int 的取值范围,导致发生越界,进而得到了负数。

这种情况虽然发生概率较低,但需要注意。为了解决这个问题,我们可以将 int 类型的数字转换为 long 类型,然后再进行绝对值运算。这样可以避免越界问题。

以下是可执行的完整代码示例,演示了如何解决这个问题:

public class AbsoluteValueExample {
    public static void main(String[] args) {
        int orderId = -2147483648;

        // 错误示例:直接使用 Math.abs()
        int wrongAbs = Math.abs(orderId);

        // 正确示例:将 int 转换为 long,再使用 Math.abs()
        long longOrderId = (long) orderId;
        long correctAbs = Math.abs(longOrderId);

        // 打印结果
        System.out.println("Wrong Abs: " + wrongAbs); // 错误结果:-2147483648
        System.out.println("Correct Abs: " + correctAbs); // 正确结果:2147483648
    }
}

在上述代码中,我们将 -2147483648 这个负数作为 orderId,并展示了两种情况。首先,直接使用 Math.abs() 方法得到了错误的绝对值 -2147483648,然后我们将 orderId 转换为 long 类型后再使用 Math.abs() 方法,得到了正确的绝对值 2147483648

赞赏