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:
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!