カテゴリ: Java 更新日: 2026/08/28

Javaのjava.mathとBigIntegerのlongValueメソッドを完全解説!初心者でもわかる数値変換の基本

BigIntegerのlongValueメソッド
BigIntegerのlongValueメソッド

先生と生徒の会話形式で理解しよう

生徒

「Javaでとても大きな数を計算したあとに、long型として使いたいことがあるんですが、どうすればいいですか?」

先生

「java.mathパッケージのBigIntegerクラスには、longValueというメソッドがあります。」

生徒

「intじゃなくてlongに変換する理由は何ですか?」

先生

「intよりも大きな数を扱いたい場面が多いからです。基本から順番に見ていきましょう。」

1. java.mathパッケージとは

1. java.mathパッケージとは
1. java.mathパッケージとは

java.mathパッケージは、Javaで大きな数値や高い精度が必要な計算を行うために用意されている標準パッケージです。普段よく使われるintやlongには扱える数値の上限がありますが、java.mathを使うことで、その制限を意識せずに数値を扱えるようになります。

特に初心者の方がつまずきやすいのが、計算結果が予想と違う値になるケースです。これは桁あふれが原因であることが多く、java.mathパッケージを使うことで、こうした問題を回避しやすくなります。

java.mathには、整数を扱うBigIntegerや、小数を正確に扱うBigDecimalなどが含まれており、金融計算や統計処理、セキュリティ関連の処理でも広く使われています。

2. BigIntegerクラスの基本

2. BigIntegerクラスの基本
2. BigIntegerクラスの基本

BigIntegerクラスは、桁数に制限のない整数を扱うためのクラスです。long型でも足りないような非常に大きな数値を、安全に保持して計算できるのが特徴です。

BigIntegerは数値型ではなくオブジェクトとして扱われるため、足し算や掛け算は演算子ではなく、addやmultiplyといったメソッドを使います。この仕組みによって、大きな数値でも正確な計算が可能になります。


import java.math.BigInteger;

public class BigIntegerBasicSample {
    public static void main(String[] args) {
        BigInteger big = new BigInteger("1000000000000");
        System.out.println(big);
    }
}

1000000000000

このように、文字列からBigIntegerを作成することで、longの範囲を超える数値も安全に扱えます。

3. BigIntegerとlongの違い

3. BigIntegerとlongの違い
3. BigIntegerとlongの違い

long型は、Javaで整数を扱う基本データ型のひとつで、int型よりも大きな数値を保存できます。件数や日時に関する数値など、int型では範囲が足りない場合によく使われます。ただし、long型にも扱える数値の上限と下限があり、その範囲を超える大きな整数を正しく保持することはできません。

一方のBigIntegerは、java.mathパッケージに用意されている非常に大きな整数を扱うためのクラスです。long型では保存できないような桁数の多い整数でも扱えるため、大きな数値を正確に保持したり計算したりしたい場合に適しています。

まずは、long型とBigIntegerで整数を作る簡単なサンプルを見てみましょう。


import java.math.BigInteger;

public class BigIntegerAndLongSample {
    public static void main(String[] args) {
        long normalNumber = 1000000000L;
        BigInteger bigNumber = new BigInteger("100000000000000000000");

        System.out.println("long型: " + normalNumber);
        System.out.println("BigInteger: " + bigNumber);
    }
}

long型: 1000000000
BigInteger: 100000000000000000000

このサンプルでは、比較的小さな整数をlong型で保存し、非常に大きな整数をBigIntegerで保存しています。long型の数値では末尾にLを付ける書き方があります。一方、BigIntegerでは大きな整数を文字列としてコンストラクタへ渡すことで、long型では扱えない桁数の整数も作成できます。

初心者の方は、long型を大きな整数を扱える普通の箱、BigIntegerをさらに大きな整数を扱える特別な箱と考えると理解しやすいでしょう。扱う数値がlong型の範囲に収まるのであればlong型で十分ですが、どこまで大きくなるか分からない整数や、long型の範囲を超える可能性がある計算ではBigIntegerが役立ちます。

もうひとつの大きな違いは計算方法です。long型は通常の整数なので、足し算ではプラス演算子を利用できます。BigIntegerはオブジェクトとして扱われるため、足し算にはaddメソッドなどの専用メソッドを利用します。


import java.math.BigInteger;

public class BigIntegerCalculationSample {
    public static void main(String[] args) {
        long longNumber = 1000L;
        long longResult = longNumber + 500L;

        BigInteger bigNumber = new BigInteger("100000000000000000000");
        BigInteger bigResult = bigNumber.add(new BigInteger("500"));

        System.out.println("long型の計算結果: " + longResult);
        System.out.println("BigIntegerの計算結果: " + bigResult);
    }
}

long型の計算結果: 1500
BigIntegerの計算結果: 100000000000000000500

このように、long型とBigIntegerはどちらも整数を扱えますが、扱える数値の大きさと計算方法が異なります。Javaで一般的な整数を扱う場合はlong型、大きな整数を正確に扱う必要がある場合はBigIntegerという違いを押さえておくと、データ型を選ぶときに迷いにくくなります。

4. longValueメソッドとは

4. longValueメソッドとは
4. longValueメソッドとは

longValueメソッドは、java.mathパッケージのBigIntegerクラスに用意されている数値変換用のメソッドです。BigIntegerが保持している大きな整数を、Javaの基本データ型であるlong型の値として取り出したいときに使います。

BigIntegerは非常に大きな整数を扱える便利なクラスですが、BigIntegerのままではlong型の変数へ直接代入することはできません。そこでlongValueメソッドを呼び出すことで、BigIntegerからlong型への変換を行います。メソッド名は、long型の値を取得するという意味で覚えると初心者にも分かりやすいでしょう。


import java.math.BigInteger;

public class LongValueExample {
    public static void main(String[] args) {
        BigInteger number = new BigInteger("5000");
        long value = number.longValue();

        System.out.println(number);
        System.out.println(value);
    }
}

5000
5000

このサンプルでは、最初に文字列の5000からBigIntegerオブジェクトを作成しています。次にnumber.longValueを呼び出し、BigIntegerが持っている5000という整数をlong型へ変換してvalue変数へ代入しています。出力結果を見るとどちらも5000ですが、numberはBigInteger型、valueはlong型として扱われています。

このようにlongValueメソッドは、BigIntegerで保持している整数をlong型として利用したい場合の橋渡しをする役割があります。大きな整数をBigIntegerで扱ったあと、処理の途中でlong型が必要になった場合に利用できる基本的な変換メソッドとして覚えておきましょう。

5. longValueの基本的な使い方

5. longValueの基本的な使い方
5. longValueの基本的な使い方

まずは、longの範囲に収まるBigIntegerをlongValueで変換する基本例を確認します。


import java.math.BigInteger;

public class LongValueBasicSample {
    public static void main(String[] args) {
        BigInteger big = new BigInteger("123456789");
        long value = big.longValue();
        System.out.println(value);
    }
}

123456789

この例では、BigIntegerの値がlongの範囲内なので、安全に変換されています。

6. longValueを使う場面

6. longValueを使う場面
6. longValueを使う場面

longValueは、ループ回数、件数管理、合計値の保持など、intでは足りないがBigIntegerほど大げさに扱いたくない場面で使われます。

特に実務では、外部データをBigIntegerで受け取り、最終的にlongで処理するという流れがよくあります。


import java.math.BigInteger;

public class LongValueUseCaseSample {
    public static void main(String[] args) {
        BigInteger countBig = new BigInteger("1000");
        long count = countBig.longValue();

        for (long i = 1; i <= count; i++) {
            if (i == 3) {
                System.out.println("3回目の処理");
                break;
            }
        }
    }
}

3回目の処理

7. longの範囲を超える場合の注意点

7. longの範囲を超える場合の注意点
7. longの範囲を超える場合の注意点

longValueもintValueと同様に、数値が範囲を超えていてもエラーを出しません。そのため、変換後の値が元のBigIntegerとは異なる数値になることがあります。


import java.math.BigInteger;

public class LongValueOverflowSample {
    public static void main(String[] args) {
        BigInteger big = new BigInteger("999999999999999999999");
        long value = big.longValue();
        System.out.println(value);
    }
}

-1486618624

このように、見た目は変換できていても、値が大きく崩れることがあります。longValueを使う前には、値の大きさを意識することが重要です。

8. 初心者が意識しておきたいポイント

8. 初心者が意識しておきたいポイント
8. 初心者が意識しておきたいポイント

BigIntegerは、long型では扱えないほど大きな整数を安全に保持して計算したいときに使うクラスです。一方でlongValueは、BigIntegerの値をlong型として扱いたい場合に利用する変換メソッドです。最初からlong型の範囲に収まることが分かっているのであれば、無理にBigIntegerを使う必要はありません。

Java初心者の方は、まず「どのくらい大きな数値を扱うのか」を考えてデータ型を選ぶことが大切です。一般的な整数であればlong型を使い、long型の範囲を超える可能性がある非常に大きな整数ではBigIntegerを使うと整理すると分かりやすくなります。

また、BigIntegerからlongValueで変換するときは、変換前の値がlong型で表現できる範囲に収まっているかを意識しましょう。longValueは値が大きすぎても自動的にエラーを出すとは限らないため、変換後の値が元の数値と同じ意味を持っているかを確認することも重要です。

初心者のうちは、大きな整数はBigIntegerで扱い、long型で十分だと確認できた場合にlongValueで変換すると覚えておくと、数値変換の考え方を整理しやすくなります。

BigIntegerとlong型は、どちらが優れているというものではなく、扱う数値の大きさや処理内容によって使い分けます。必要以上に大きな型を使うのではなく、データの範囲に合った型を選び、BigIntegerからlong型へ変換するときには値の範囲を確認する習慣を身につけることで、Javaの数値処理で起こるバグや桁あふれを防ぎやすくなります。

まとめ

まとめ
まとめ

Javaで大きな整数を扱うときには、基本データ型であるint型やlong型だけではなく、java.mathパッケージに用意されているBigIntegerクラスを理解しておくことが大切です。BigIntegerは、long型では表現できない非常に大きな整数を扱えるクラスであり、桁数の大きい計算、巨大な数値の集計、暗号処理、外部システムから受け取った大きな整数の管理など、さまざまな場面で利用できます。今回学習したlongValueメソッドは、そのBigIntegerの値をJavaのlong型として取り出したいときに使う基本的な数値変換メソッドです。

BigIntegerとlong型は、どちらも整数を扱いますが、役割は大きく異なります。long型には扱える数値の範囲が決められている一方、BigIntegerは非常に大きな整数を保持できます。そのため、計算途中ではBigIntegerを使って値を安全に保持し、最終的にlong型で十分だと分かった段階でlongValueメソッドを使って変換するという流れを覚えておくと便利です。ただし、longValueメソッドはBigIntegerの値がlong型の範囲を超えていても例外を発生させないため、この特徴を理解せずに利用すると予想外の値になる可能性があります。

BigIntegerは大きな整数を安全に扱うためのクラス

Javaの数値型を学び始めると、最初はint型を使う機会が多く、その次により大きな値を扱えるlong型を学習します。しかし、どちらも扱える範囲には上限があります。大量のデータを集計する処理や、非常に大きな整数を計算する処理では、long型でも足りなくなる可能性があります。そのような場面で利用できるのがjava.mathパッケージのBigIntegerクラスです。

BigIntegerは通常の基本データ型とは異なり、オブジェクトとして数値を扱います。そのため、加算ではaddメソッド、減算ではsubtractメソッド、乗算ではmultiplyメソッドなどを利用します。最初は通常の演算子と違うため難しく感じるかもしれませんが、桁あふれを避けながら大きな整数を扱えることは大きな利点です。Javaで大きな整数の計算方法を学ぶときには、BigIntegerの生成方法と計算メソッド、そして基本データ型への変換方法をまとめて理解しておくとよいでしょう。

longValueメソッドはBigIntegerをlong型へ変換する

BigIntegerのlongValueメソッドは、BigIntegerオブジェクトが保持している整数をlong型として取得するためのメソッドです。引数は必要なく、変換した結果をlong型の変数へ代入できます。BigIntegerで計算した結果を、long型を受け取る既存のメソッドへ渡したい場合や、long型で管理している変数と組み合わせたい場合などに利用できます。

たとえば件数や連番、時間に関する値、集計結果などを一度BigIntegerとして受け取ったあと、実際にはlong型の範囲に十分収まることが分かっている場合にはlongValueメソッドで変換できます。BigIntegerを使い続ける必要がない処理でlong型へ戻すことで、その後のコードを簡潔に書けることもあります。

BigIntegerのlongValueメソッドは便利ですが、変換前の値がlong型で表現できる範囲に収まっているかどうかを自動的に保証するメソッドではありません。大きな値を扱うときは変換後の数値が正しいかを意識することが重要です。

longValueでは範囲を超えても例外が発生しない

longValueメソッドを使ううえで最も重要な注意点は、BigIntegerの値がlong型の範囲を超えていてもArithmeticExceptionなどの例外が自動的に発生するわけではないことです。値が大きすぎる場合でも変換処理自体は行われますが、元のBigIntegerとは異なるlong型の値になることがあります。

初心者のうちは、メソッドが正常に終了すれば正しい値へ変換できたと思ってしまいがちです。しかし、数値変換では処理が終了したかどうかだけではなく、変換後にも元の意味が保たれているかを確認する必要があります。特にBigIntegerはlong型よりもはるかに大きな値を保持できるため、巨大な数値をlongValueで変換すると情報が失われる可能性があります。

このような問題は、桁あふれやオーバーフローに近い考え方として理解できます。Javaで数値型を変換するときは、変換元の型と変換先の型が扱える範囲を比較する習慣を身につけることが大切です。値が範囲内であることが確実な場面ではlongValueを使いやすいですが、外部入力や計算結果などによって値が変化する場合には、より慎重な変換方法を検討しましょう。

厳密な変換が必要ならlongValueExactを検討する

BigIntegerには、longValueメソッドだけではなくlongValueExactメソッドも用意されています。longValueExactは、BigIntegerの値がlong型で正確に表現できない場合にArithmeticExceptionを発生させます。そのため、値が壊れた状態で処理を続けたくない場合には、longValueよりも安全な選択肢になります。

longValueは範囲外でも変換を行うのに対して、longValueExactは正確に変換できる場合だけlong型の値を返すという違いがあります。名前にExactが付いているメソッドは、正確な変換を重視したい場合に役立ちます。データの正しさが重要な業務システムや、金額以外でも件数や識別番号などを厳密に扱う処理では、この違いを理解して使い分けることが重要です。


import java.math.BigInteger;

public class BigIntegerLongExactSample {
    public static void main(String[] args) {
        BigInteger number = new BigInteger("5000000000");

        try {
            long value = number.longValueExact();
            System.out.println("変換結果: " + value);
        } catch (ArithmeticException e) {
            System.out.println("long型へ正確に変換できません");
        }
    }
}

変換結果: 5000000000

この例ではBigIntegerの値がlong型の範囲内に収まっているため、longValueExactメソッドでも正常に変換できます。もしlong型で表現できないほど大きなBigIntegerを指定すると、例外が発生します。変換に失敗したことを明確に検出できるため、予期しない数値のまま後続処理へ進むことを防ぎやすくなります。

longValueとlongValueExactは目的に応じて使い分ける

longValueとlongValueExactのどちらを利用するかは、プログラムで求められる安全性によって変わります。変換対象の値が必ずlong型の範囲内に収まることが設計上保証されている場合には、longValueを使うことで簡潔に変換できます。一方、ユーザー入力や外部サービスから受け取った値など、実際にどの程度の大きさになるか分からない場合には、longValueExactを利用して範囲外を検出する方法が安心です。

Javaのプログラミングでは、ただ短いコードを書くことよりも、データの性質に合った処理を選ぶことが大切です。BigIntegerからlong型への変換でも同じで、値が失われても問題がないのか、必ず元の数値を保つ必要があるのかによって選択するメソッドが変わります。特に業務システムでは、気付かないまま別の値として保存されることを避けるため、厳密な変換を選んだほうがよい場面が多くあります。

BigIntegerを使うべき場面とlong型で十分な場面を整理する

BigIntegerは大きな整数を扱える便利なクラスですが、すべての整数処理で利用する必要はありません。扱う値の上限が明確で、long型の範囲内に収まることが分かっている場合は、最初からlong型を利用したほうがコードを簡単に書けます。反対に、非常に大きな値になる可能性がある場合や、将来的な値の増加を考慮する必要がある場合にはBigIntegerが候補になります。

たとえば巨大な整数を扱う数学的な処理、暗号技術に関係する計算、大きな整数を文字列として外部から受け取る処理などではBigIntegerが適しています。一方で一般的な件数管理、時刻や経過時間、通常の業務データなどではlong型で十分なことも多くあります。データ型は大きければよいというものではなく、必要な範囲と処理内容に合わせて選択することが基本です。

外部データを変換するときは特に注意する

実務では、データベースや外部システム、ファイル、通信処理などからBigInteger相当の大きな整数を受け取る場合があります。このような値は、自分のプログラムだけで生成した数値とは異なり、想定より大きな値が届く可能性があります。そのため、受け取ったBigIntegerをすぐにlongValueで変換するのではなく、long型で扱えることが保証されているかを確認することが大切です。

特に識別番号や大量データの件数、巨大な連番などでは、現在はlong型に収まっていても将来的に範囲が広がる可能性があります。システム間で数値を受け渡す場合には、データ仕様を確認し、どの範囲まで許可されているのかを把握したうえで変換方法を決めると安全です。

BigIntegerとlongValueで覚えておきたいポイント

BigIntegerはjava.mathパッケージに含まれる大きな整数を扱うためのクラスです。longValueメソッドを使うとBigIntegerをlong型へ変換できますが、変換元の値がlong型の範囲を超えていても自動的な例外は発生しません。そのため、変換対象の数値がlong型で表現できるかを確認することが重要です。

値を正確に変換できない場合に処理を失敗させたいときはlongValueExactも選択肢になります。BigInteger、long型、longValue、longValueExact、数値変換、桁あふれ、例外処理という関連する知識を一緒に理解しておくことで、Javaの数値処理をより安全に実装できるようになります。

Java初心者は数値型の範囲を意識する習慣を身につけよう

Java初心者がBigIntegerとlongValueを学ぶときに大切なのは、メソッド名や書き方だけを暗記しないことです。なぜBigIntegerが必要なのか、なぜlong型へ変換するのか、変換するとどのような問題が起こる可能性があるのかまで理解すると、他の数値型を学ぶときにも応用できます。

int型からlong型への変換、BigIntegerからlong型への変換、BigDecimalから整数型への変換など、Javaにはさまざまな数値変換があります。どの変換でも重要なのは、変換先の型で元の値を表現できるかという考え方です。見た目上はエラーにならなくても値が変化することがあるため、特に小さい型へ変換するときには注意しましょう。

BigIntegerのlongValueメソッドを理解することは、Javaの型変換、データ型、数値範囲、オーバーフロー、例外処理を理解することにもつながります。単なる変換用メソッドとして覚えるのではなく、大きな整数をどのように安全に扱うかという視点で学習すると、実際のJava開発でも役立つ知識になります。

BigIntegerからlongへの変換を安全に設計することが大切

JavaでBigIntegerを使う目的は、通常の整数型では扱えない値を正確に保持することです。そのため、最後にlong型へ変換するときに値を壊してしまっては、BigIntegerを使った意味が薄れてしまいます。longValueを利用するときには、変換後の型の範囲を確認し、必要であればlongValueExactや例外処理を組み合わせることが重要です。

安全なプログラムでは、正常な値だけではなく異常な値が渡された場合も考えます。BigIntegerの値が想定以上に大きかった場合にどうするのか、エラーとして利用者へ知らせるのか、処理を中断するのか、別の形式で保持するのかをあらかじめ決めておくと、予期しない不具合を防ぎやすくなります。

java.mathパッケージ、BigIntegerクラス、longValueメソッドの基本を押さえたら、次はlongValueExactやintValue、intValueExactなどの関連メソッドも確認してみると理解が深まります。数値を扱うクラスと変換メソッドの特徴を比較しながら学ぶことで、状況に応じて適切な方法を選べるようになります。

先生と生徒の振り返り会話

生徒

「BigIntegerはlong型よりも大きな整数を扱えて、longValueを使うとlong型へ変換できるということですね。」

先生

「そうです。BigIntegerで大きな整数を安全に扱い、必要な場面でlong型へ変換できます。ただし、変換するときには値の範囲に注意が必要です。」

生徒

「longValueは値が大きすぎても例外にならないんですよね。」

先生

「その点が重要です。変換そのものはできても、元のBigIntegerと違う値になる可能性があります。処理が止まらなかったから安全とは限りません。」

生徒

「正確に変換できない場合にエラーにしたいならlongValueExactを使えばいいんですね。」

先生

「はい。long型の範囲外ならArithmeticExceptionが発生するので、不正な変換を見逃したくない処理に向いています。」

生徒

「BigIntegerを使えば何でも安全というわけではなく、最後に別の型へ変換するときまで考える必要があるんですね。」

先生

「その通りです。BigIntegerは大きな値を保持できますが、long型へ変換した瞬間にlong型の制限を受けます。変換先のデータ型の範囲を理解しておくことが大切です。」

生徒

「外部システムから受け取った値を変換するときも、最初に範囲を意識したほうがよさそうですね。」

先生

「そうですね。自分で作った値と違って、外部データは想定以上に大きい可能性があります。仕様を確認し、安全性が必要なら厳密な変換方法を選びましょう。」

生徒

「BigInteger、longValue、longValueExactの役割を分けて覚えると分かりやすいですね。」

先生

「はい。大きな整数を扱うのがBigInteger、long型へ取り出すのがlongValue、正確な変換を確認しながら取り出すのがlongValueExactと整理すると理解しやすいです。数値の範囲と変換後の安全性まで意識できれば、Javaの数値処理をより確実に書けるようになります。」

生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Spring
Spring Bootの@RequestParamの使い方を解説!初心者でもわかるGETリクエストのパラメータ取得
更新記事
New2
Java
JavaのLocalDateTime.formatメソッドを完全解説!初心者でもわかる日時フォーマット入門
更新記事
New3
Java
Javaのラムダ式とStreamのfilterを徹底解説!初心者でもわかる条件による絞り込み処理
更新記事
New4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
更新記事
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.3
Java&Spring記事人気No3
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.4
Java&Spring記事人気No4
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.6
Java&Spring記事人気No6
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.7
Java&Spring記事人気No7
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎
No.8
Java&Spring記事人気No8
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本