Java開発ではキャストと呼ばれるデータ型の変換処理を頻繁に利用することになります。
本記事では、Javaプログラミング初心者向けにキャスト(型変換)処理について解説していきます。
Javaのキャストって何?
Javaなどのプログラミング言語では「型」と呼ばれるデータ形式の概念があり、元のデータ型を異なるデータ型に変換する処理のことを「キャスト」といいます。
暗黙的なキャスト
Javaでは、小さい型から大きな型に変換する場合、暗黙的に自動でキャスト処理が行われます。
小さい型をint型とした場合、「long型」「float型」「double型」に変換する場合、暗黙的なキャストが利用可能です。
明示的なキャスト
暗黙的なキャストと反対で、大きな型から小さい型に変換する場合、明示的にキャスト処理を実施する必要があります。
上述した例を用いると「long型」「float型」「double型」から「int型」に変換する場合には、明示的なキャストが必要です。
キャストの方法
では実際にJavaでどのようにキャストするのかというと下記の記述となります。
(データ型)変数名
例えばlong型の変数をint型に変換する場合は下記のようになります。
long ln = 12345; int num = (int)ln;
Javaで文字列型と数値型をキャストする方法
文字列型と数値型のキャストを実施する場合、それぞれに用意されたメソッドを利用することで変換処理が可能です。
数値型から文字列型への変換
数値型から文字列型への変換には、String型の「valueOf」メソッドが利用出来ます。
引数として設定した数値をString型へ変換します。
String str = String.valueOf(12345);
文字列型から数値型への変換
反対に文字列型から数値型へ変換するには、数値型それぞれに用意されている「parse」メソッドが利用出来ます。
例えばIntegerクラスの場合「parseInt」メソッドを利用します。
Integer int = Integer.parseInt("123");
他にも各クラスで下記のようなメソッドが用意されています。
- Byte: parseByte
- Short: parseShort
- Long: parseLong
- float: parseFloat
- Double: parseDouble
キャスト処理をJavaのサンプルコードで確認しよう
では実際にサンプルコードでプログラムの処理内容を具体的に確認していきましょう。
拡大キャスト
まずは暗黙的な変換が可能な拡大キャストのサンプルコードです。
public class Main { public static void main(String[] args) { int num = 12345; long ln = num; System.out.println(ln); } }
実行結果は下記です。
12345
特にコードでキャスト処理を実装している部分はありませんが、暗黙的にキャスト処理が実行されています。
縮小キャスト
次に明示的な変換が必要な縮小キャストのサンプルコードです。
public class Main { public static void main(String[] args) { long ln = 12345; int num = (int)ln; System.out.println(num); } }
実行結果は下記です。
12345
ちなみに明示的なキャストをせずに実行しようとすると、下記のエラーが出力されます。
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 型の不一致: long から int には変換できません
数値から文字列
次はStringクラスのvalueOfメソッドを使用して、数値から文字列へキャストするサンプルコードです。
public class Main { public static void main(String[] args) { long ln = 12345; int num = 6789; String str1 = String.valueOf(ln); String str2 = String.valueOf(num); System.out.println(str1 + str2); } }
実行した結果が下記です。
123456789
サンプルではint型とlong型の変数を文字列へ変換した上でコンソール出力しています。
数値型の場合「+」記号を利用すると足し算が実行されますが、文字列へのキャスト処理が行われているため、実行結果のように文字列連結された状態で出力されます。
文字列から数値
次は反対に文字列から数値へのキャストを「parse」メソッドで実施するサンプルです。
public class Main { public static void main(String[] args) { String str1 = "12345"; String str2 = "678.9"; int num = Integer.parseInt(str1); double db = Double.parseDouble(str2); System.out.println(num + db); } }
実行した結果が下記です。
13023.9
文字列で定義した変数を数値型にキャストしているため、「+」演算子で数値としての計算が実施されサンプルのような結果が出力されます。
ちなみにdouble型では対応可能な小数点ですが、下記のようにint型へキャストしようとするとエラーとなるため注意してください。
public class Main { public static void main(String[] args) { String str1 = "12345"; String str2 = "678.9"; int num1 = Integer.parseInt(str1); int num2 = Integer.parseInt(str2); System.out.println(num1 + num2); } }
実行した結果が下記のエラーです。
Exception in thread "main" java.lang.NumberFormatException: For input string: "678.9" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
さいごに: Javaのキャスト処理は実践での必須知識
本記事では、Javaにおけるデータ型の変換「キャスト」処理について解説してきました。
宣言したデータ型とは異なるデータ型として処理を行いたい機会は意外に多く、実践プログラムにおける必須知識の1つです。
クラスなどの概念にあまり慣れていないプログラム初心者の方には少しややこしい内容かも知れませんが、Javaのプログラム開発では頻繁に用いられる機能ですので、実際に手を動かしながらキャスト処理の内容を理解できるよう学習してみてください。
注意点として、キャストを実施する場合変換後のデータ型に値を格納出来る必要があります。
long型からint型に変換する場合、int型に格納できる数値でないとエラーとなってしまいます。