ホームページ  >  記事  >  Java  >  Java 8 以降で Long を Int に安全にキャストするにはどうすればよいですか?

Java 8 以降で Long を Int に安全にキャストするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 09:36:30116ブラウズ

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

Java での Long から Int への安全なキャスト (Java 8 用に更新)

Java では、long から int へのキャストにより潜在的に次のような結果が生じる可能性があります。データ損失の場合。この懸念に対処するには、安全で慣用的なアプローチが不可欠です。

Java 8 の Math.toIntExact() メソッド

Java 8 より前では、安全にキャストするために推奨されていたメソッドLong から int への変換は、情報損失の可能性がないか結果をチェックするためのものでした。これには、キャスト結果と元の long 値の比較が含まれます:

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

ただし、Java 8 以降では、より効率的なメソッドである Math.toIntExact() メソッドが導入されています。発生オーバーフロー時会抛出ArithmeticException:

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

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

Java 8 の追加のオーバーフロー安全メソッド

toIntExact() に加えて、Java 8 では他のいくつかのオーバーフローが導入されました。 -「exact」で終わる安全なメソッド。これらのメソッドは、潜在的なオーバーフローをチェックしながら加算、減算、否定、減分などの演算を実行します。

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

Math.toIntExact を利用する() およびこれらの追加のオーバーフロー安全メソッドを使用すると、情報を失うリスクを負うことなく、long 値を int に安全にキャストし、算術演算を実行できます。

以上がJava 8 以降で Long を Int に安全にキャストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。