【Java】LongオブジェクトからIntegerオブジェクトへ変換する方法

java

今回は、大きな型から小さな型へ変換する方法を紹介します。
今回紹介する方法は、プリミティブ型(longやint)ではなく、オブジェクト型(LongやInteger)の大きな型から小さな型へ変換する方法を紹介します。

[スポンサーリンク]

大きな型から小さな型へ変換する方法は、特別なロジックを書く必要はありません。
必要なことは、プリミティブ型とオブジェクト型の違いを意識することだけです。

プリミティブ型のlongからintへ変換する方法

プリミティブ型の大きい型から小さい型へ変換する方法を復習しましょう。
long値をint値に変更するには、キャストすれば、大きい値から小さい値へ変換可能です。

public static void main(String[] args) throws Exception {
	long l = 100;
	int i = (int)l;
	System.out.println("intの値は、" + i);
}

実行結果

>実行結果
intの値は、100

int値へ変換する際に数値があふれた場合の挙動

大きな型から小さな型へ変換する時に一番注意しなければいけないことです。

intの最大値は、2147483647です。
もしもlongの値が、intの最大値を超えた場合、どのような挙動になるのでしょうか。
結果として、実行エラーとはならず、intの数値がおかしくなってしまいます。

public static void main(String[] args) throws Exception {
	// int 値以上の値をlongに設定します。
	long l = 2147483648l;
	int i = (int)l;
	System.out.println("intの値は、" + i);
}

実行結果

>実行結果
intの値は、-2147483648

オブジェクト型のLongからIntegerへ変換する方法

この記事のメインの項目です。
オブジェクト型で大きい型から小さい型へ変換する方法です。

3行目を見て下さい。一度StringにしてからIntegerへ変換しています。
この方法であれば、もし型があふれた場合例外が発生します。これは便利です。
型あふれについては次のソースで説明します。

public static void main(String[] args) throws Exception {
	Long l = new Long(100l);
	Integer i = new Integer(l.toString());
	System.out.println("Integerの値は、" + i);
}

実行結果

>実行結果
Integerの値は、100

Integer値へ変換する際に数値があふれた場合の挙動

プリミティブ型でもやりましたが、大きな型から小さな型へ変換する時に、型あふれが起こった時の挙動です。

プリミティブ型の時とは挙動がことなり、NumberFormatExceptionが発生しています。
こちらの方が親切ですね。

public static void main(String[] args) throws Exception {
	// Integer 値以上の値をLongに設定します。
	Long l = new Long(2147483648l);
	Integer i = new Integer(l.toString());
	System.out.println("Integerの値は、" + i);
}

実行結果

>実行結果
Exception in thread "main" java.lang.NumberFormatException: For input string: "2147483648"

さいごに

小さい型から大きな型へ変換する方法は、比較的簡単だっと思います。
今回のように、大きな型から小さな型へ変換するのは、例外処理を考えたりするので、多少大変な感じがあります。
まあ、もともと大きなものから小さなものにするのは、理論的に無理があることなので。。

大きな型から小さな型へ変更する時は、例外処理や閾値のことをきちんと考慮しましょう!
それでは!