Javaの型変換とは、データの型を別の型へ変換することである。例えばint型の値を持つ変数の型を、計算精度を上げるためにdouble型に変換して計算を行うということがある。int型のままで割り算を繰り返し行うと、小数点以下の値が失われていくこと起こる可能性があるからである。
精度を求められる計算をするためには、どのような場合に型変換するべきか、型変換がどのように数値に影響を与えるかをあらかじめ理解しておくことは重要である。
このような型変換には大きく分けて次のようは種類がある。
変換元の基本型 | 型変換が可能な変更先の基本型 |
---|---|
char | int, long, float, double |
byte | short, int, long, float, double |
short | int, long, float, double |
int | long, float, double |
long | float, double |
float | double |
double | なし |
bytet型からshort型、short型からint型、int型からlong型への変換などサイズが小さい型から大きい型への変換の場合、より大きな数値が格納できるところへ変換するわけですから特に意識することなく変換することができます。
byte a = 127; short b = a; System.out.println(b);//出力結果=127
short c = 32767; long d = c; System.out.println(d);//出力結果=32767
long型からint型、int型からshort型、short型からbyte型への変換などサイズが大きい型から小さい型への変換の場合、キャスト演算子を使って明示的に型が変更されることを示す必要があります。
long a = Long.MAX_VALUE;//longの最大値を代入しています System.out.println(a);//出力結果=9223372036854775807 short b = (short) a;//キャストで型変換しています System.out.println(b);//出力結果=-1
package JSample; public class JSample14_1 { public static void main(String[] args) { System.out.println("サイズが小さい型から大きい型への変換"); int a = 3; double b = a; System.out.println("変換前:" + a); System.out.println("変換後:" + b); System.out.println("サイズが大きい型から小さい型への変換"); double c = 1.25; int d = (int) c; System.out.println("変換前:" + c); System.out.println("変換後:" + d); } }
int→ String
String str = String.valueOf(数値)String→int
int i = Integer.parseInt(文字列)
package JSample; public class JSample14_2 { public static void main(String[] args) { int a = 3; String str = String.valueOf(a); System.out.println("int型" + a); System.out.println("String型" + str); String b = "123"; int c = Integer.parseInt(b); System.out.println("String型" + b); System.out.println("int型" + c); } }実行結果
Date→String
package JSample; import java.text.SimpleDateFormat; import java.util.Date; public class JSample14_3 { public static void main(String[] args) { Date date = new Date(); // 今日の日付 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String strDate = dateFormat.format(date); System.out.println(date); System.out.println(strDate); } }実行結果
package JSample; import java.util.Date; public class JSample14_4 { public static void main(String[] args) { Date date = new Date(); // 今日の日付 String strDate = date.toString(); System.out.println(date); System.out.println(strDate); } }実行結果
package JSample; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class JSample14_5 { public static void main(String[] args) throws ParseException { String strDate = "2021-12-31"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = dateFormat.parse(strDate); System.out.println(date); // => Fri Dec 31 12:33:44 JST 2021 } }実行結果
package JSample; import java.text.ParseException; import java.util.Date; public class JSample14_6 { public static void main(String[] args) throws ParseException { String strDate = "2021-12-31"; Date sqlDate = java.sql.Date.valueOf(strDate); System.out.println(sqlDate); // => 2021-12-31 } }実行結果
Date→Calendar
Date date = new Date(); // 今日の日付 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); System.out.println(calendar); // =>java.util.GregorianCalendar[time=1546228443561,areFieldsSet=true, ...]
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2021); //年を設定 calendar.set(Calendar.MONTH, 11); //月を設定(※MONTHは0始まり 0→Jan、1→Feb、...になる) calendar.set(Calendar.DAY_OF_MONTH, 31);//日を設定 Date date = calendar.getTime(); System.out.println(date); // => Fri Dec 31 12:33:44 JST 2021
問題[JEx14_1.java]
以下の変数を作成してプログラムを完成してください。
型:char 変数名:hiragana 初期値:'あ'
型:int 変数名:code 初期値:hiraganaのデータをintへキャスト
public class JEx14_1 { public static void main(String[] args){ //xxxxを適切な変数名に変更してください System.out.println("変数hiraganaには「" + xxxx + "」が保存されています。"); //xxxxを適切な変数名に変更してください System.out.println("「" + xxxx + "」の文字コードは" + xxxx); //codeにインクリメントおよびキャストを行ってください。(実行結果参照) System.out.println("codeの文字コードをインクリメントすると「" + code + "」となります。"); } }実行結果