"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How Can I Safely Cast a Long to an Int in Java 8 and Beyond?

How Can I Safely Cast a Long to an Int in Java 8 and Beyond?

Published on 2024-11-15
Browse:231

How Can I Safely Cast a Long to an Int in Java 8 and Beyond?

Safely Casting Long to Int in Java (Updated for Java 8 )

In Java, casting from a long to an int can potentially result in data loss. To address this concern, a safe and idiomatic approach is essential.

Java 8's Math.toIntExact() Method

Prior to Java 8, the recommended method to safely cast a long to an int was to check the result for potential information loss. This involved comparing the cast result with the original long value:

public static int safeLongToInt(long l) {
    int i = (int) l;
    if ((long) i != l) {
        throw new IllegalArgumentException(l   " cannot be cast to int without changing its value.");
    }
    return i;
}

However, in Java 8 and above, a更为简洁有效的方法已被引入:Math.toIntExact()方法。此方法在发生溢出时会抛出ArithmeticException:

import static java.lang.Math.toIntExact;

long foo = 10L;
int bar = toIntExact(foo);

Additional Overflow-Safe Methods in Java 8

In addition to toIntExact(), Java 8 introduced several other overflow-safe methods that end with "exact". These methods perform operations like addition, subtraction, negation, and decrementation while checking for potential overflows:

  • Math.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long)
  • Math.subtractExact(int, int)

By utilizing Math.toIntExact() and these additional overflow-safe methods, you can safely cast long values to int and perform arithmetic operations without the risk of losing information.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3