第14章 型変換の基本ルール

この章ではJavaの型変換の基本ルールについて説明します。

HOMEPAGE

型変換の基本ルール


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

データ型が持つことのできるサイズを超えるとデータの切り捨て(データの溢れ)が生じ、想定された実行結果になりません。

例:[JSample14_1.java]
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);
    }
}

実行結果
サイズが小さい型から大きい型への変換
変前:3
変換後:3.0
サイズが大きい型から小さい型への変換
変換前:1.25
変換後:1



文字列への変換

int→ String

String str = String.valueOf(数値)
String→int
int i = Integer.parseInt(文字列)

例:[JSample14_2.java]
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);
    }
}
実行結果
int型3
String型3
String型123
int型123



日付に関するデータ型

Date→String

例:[JSample14_3.java]
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); 
    }
}
実行結果
Fri Dec 31 12:33:44 JST 2021
2021-12-31



例:[JSample14_4.java]
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);
    }
}
実行結果
Fri Dec 31 12:33:44 JST 2021
Fri Dec 31 12:33:44 JST 2021



Date→String
例:[JSample14_4.java]
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
    }
}
実行結果
Mon Dec 31 12:33:34 JST 2021



例:[JSample14_6.java]
    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
        }
    }
実行結果
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→Date
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 + "」となります。");
   }
}
実行結果
変数hiraganaには「あ」が保存されています。
「あ」の文字コードは12354
codeの文字コードをインクリメントすると「ぃ」となります。



戻る