Javaの型変換(キャスト)
型変換(キャスト)とは、あるデータ型を別のデータ型に変換することを指します。例えば、int型をdouble型に変換するような処理です。
Javaには、主に2種類のキャストが存在します。
- ワイドニング・キャスト(自動):小さいサイズから大きいサイズへの型変換
byte -> short -> char -> int -> long -> float -> double - ナローイング・キャスト(手動):大きいサイズから小さいサイズへの型変換
double -> float -> long -> int -> char -> short -> byte
1. ワイドニング・キャスト(自動型変換)
ワイドニング・キャストは、小さいサイズの型を大きいサイズの型へ代入する際に、Javaコンパイラによって自動的に実行されます。
この変換は、情報の損失(データの欠落)が発生するリスクがないため、安全に行われます。例えば、int型の値は、より容量の大きいdouble型の変数に安全に格納できます。
1.1 ワイドニング・キャストのコード例
public class Main {
public static void main(String[] args) {
int myInt = 9;
double myDouble = myInt; // 自動キャスト:intからdoubleへ
System.out.println(myInt); // 出力:9
System.out.println(myDouble); // 出力:9.0
}
}2. ナローイング・キャスト(手動型変換)
ナローイング・キャストは、変換後の型を括弧 () で囲み、値の前に記述することで手動で行う必要があります。
この処理が必要な理由は、ナローイングによってデータの損失が発生する可能性があるためです(例えば、double型をint型に変換する際、小数点以下の値が切り捨てられます)。
2.1 ナローイング・キャストのコード例
public class Main {
public static void main(String[] args) {
double myDouble = 9.78d;
int myInt = (int) myDouble; // 手動キャスト:doubleからintへ
System.out.println(myDouble); // 出力:9.78
System.out.println(myInt); // 出力:9
}
}3. 実践的なユースケース
型変換が実際にどのような場面で使われるか、具体例を見てみましょう。ここでは、ゲームにおけるユーザーのスコアと最大スコアの比率(パーセンテージ)を計算します。
計算結果を整数ではなく、精度の高い「浮動小数点数(floating-point value)」として取得するために、型変換を活用します。
3.1 スコア計算におけるキャストの例
public class Main {
public static void main(String[] args) {
// ゲームの最大可能スコアを500に設定
int maxScore = 500;
// ユーザーの実際のスコア
int userScore = 423;
/* 獲得可能な最大スコアに対するユーザースコアの割合を計算。
除算を正確に行うため、userScoreをdoubleにキャストする */
double percentage = (double) userScore / maxScore * 100.0d;
System.out.println("ユーザーの達成率は " + percentage + "% です");
}
}