「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java 8 以降で Long を Int に安全にキャストするにはどうすればよいですか?

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

2024 年 11 月 15 日に公開
ブラウズ:719

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 値の比較が含まれます。

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

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

静的 java.lang.Math.toIntExact をインポートします。 ロングフー = 10L; int bar = toIntExact(foo);
import static java.lang.Math.toIntExact;

long foo = 10L;
int bar = toIntExact(foo);
Java 8 の追加のオーバーフロー セーフ メソッド

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

Math.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long)
  • Math.subtractExact(int, int)
  • By Math.toIntExact() とこれらの追加のオーバーフロー安全メソッドを利用すると、long 値を int に安全にキャストして算術演算を実行できます。情報損失のリスクなしで運用できます。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3