Home  >  Article  >  Java  >  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?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 09:36:30116browse

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:

<code class="java">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;
}</code>

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

<code class="java">import static java.lang.Math.toIntExact;

long foo = 10L;
int bar = toIntExact(foo);</code>

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.

The above is the detailed content of How Can I Safely Cast a Long to an Int in Java 8 and Beyond?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn