第8章 型変換の基本ルール
この章ではJavaの型変換の基本ルールについて説明します。
homepage
# **型変換の基本ルール** *** Javaの型変換とは、データの型を別の型へ変換することである。例えばint型の値を持つ変数の型を、計算精度を上げるためにdouble型に変換して計算を行うということがある。int型のままで割り算を繰り返し行うと、小数点以下の値が失われていくこと起こる可能性があるからである。 精度を求められる計算をするためには、どのような場合に型変換するべきか、型変換がどのように数値に影響を与えるかをあらかじめ理解しておくことは重要である。 このような型変換には大きく分けて次のようは種類がある。 * サイズが小さい型から大きい型への変換 →ワイドニング変換(Widening conversion) * サイズが大きい型から小さい型への変換 →ナローイング変換(Narrowing conversion) では、それらをひとつひとつ見ていこう。 <!--graph8-1.png--> <a href="https://i.loli.net/2019/08/09/wGa2MNWRcQfH9to.png" target="_blank"> <img src="https://i.loli.net/2019/08/09/wGa2MNWRcQfH9to.png" width="40%"/></a> <br> ## **1.サイズが小さい型から大きい型への変換** short型からint型への変換や、int型からlong型への変換などサイズが小さい型から大きい型への変換の場合、より大きな数値が格納できるところへ変換するわけですから特に意識することなく変換することができます。 ``` short s = 10; int i = s; long l = i; ``` <br><br> ## **2.サイズが大きい型から小さい型への変換** int型からshort型への変換や、long型からint型への変換などサイズが大きい型から小さい型への変換の場合、キャスト演算子を使って明示的に型が変更されることを示す必要があります。 ``` int i = 10; short s = (short)i; ``` <!--graph8-2.png--> <a href="https://i.loli.net/2019/08/09/LfouPO9vaQKzw14.png" target="_blank"> <img src="https://i.loli.net/2019/08/09/LfouPO9vaQKzw14.png" width="40%"/></a> では簡単な例で試しておきます。 <br> #### **例** [JSample8_1.java] <pre><code>package JSample; public class JSample8_1 { public static void main(String[] args) { System.out.println("サイズが小さい型から大きい型への変換"); int i = 7; double j = i; System.out.println("変換前:" + i); System.out.println("変換後:" + j); System.out.println("サイズが大きい型から小さい型への変換"); double a = 1.25; int b = (int) a; System.out.println("変換前:" + a); System.out.println("変換後:" + b); } } </code></pre> #### **実行結果** サイズが小さい型から大きい型への変換 変<br> 前:7<br> 変換後:7.0<br> サイズが大きい型から小さい型への変換<br> 変換前:1.25<br> 変換後:1 <br><br> ## **3.int ⇄ Stringの型変換** ### **int→ String** ``` String str = String.valueOf(数値) ``` ### **String→int** ``` int i = Integer.parseInt(文字列) ``` <br> #### **例** [JSample8_2.java] <pre><code>package JSample; public class JSample8_2 { public static void main(String[] args) { int i = 7; String str = String.valueOf(i); System.out.println("int型" + i); System.out.println("String型" + str); String s = "123"; int j = Integer.parseInt(s); System.out.println("String型" + s); System.out.println("int型" + j); } } </code></pre> #### **実行結果** int型7<br> String型7<br> String型123<br> int型123 <br><br> ## **4.日付⇄文字列の変換** ### **Date→String** SimpleDateFormatで出力したい日付のフォーマットを指定する format(Date date)メソッドで文字列に変換 <br> #### **例** [JSample8_3.java] <pre><code>package JSample; import java.text.SimpleDateFormat; import java.util.Date; public class JSample8_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); } } </code></pre> #### **実行結果** Wed Oct 16 15:31:41 JST 2019<br> 2019-10-16 `toString()`メソッドを使うと、そのまま文字列になる #### **例** [JSample8_4.java] <pre><code>package JSample; import java.util.Date; public class JSample8_4 { public static void main(String[] args) { Date date = new Date(); // 今日の日付 String strDate = date.toString(); System.out.println(date); System.out.println(strDate); } } </code></pre> #### **実行結果** Wed Oct 16 15:37:34 JST 2019<br> Wed Oct 16 15:37:34 JST 2019 <br><br> ### **String→Date** **(1)parseメソッドを用いた変換** あらかじめフォーマットを決める必要がある parseメソッドを使うクラスでParseExceptionを宣言する必要がある <br> #### **例** [JSample8_5.java] <pre><code>package JSample; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class JSample8_5 { public static void main(String[] args) throws ParseException { String strDate = "2018-12-31"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = dateFormat.parse(strDate); System.out.println(date); // => Mon Dec 31 00:00:00 JST 2018 } } </code></pre> #### **実行結果** Mon Dec 31 00:00:00 JST 2018 <br> **(2)valueOf(String s)メソッドを用いた変換** valueOfメソッドの戻り値はjava.sql.Dateオブジェクトになる #### **例** [JSample8_6.java] <pre><code>package JSample; import java.text.ParseException; import java.util.Date; public class JSample8_6 { public static void main(String[] args) throws ParseException { String strDate = "2018-12-31"; Date sqlDate = java.sql.Date.valueOf(strDate); System.out.println(sqlDate); // => 2018-12-31 } } </code></pre> #### **実行結果** 2018-12-31 <br><br> ## **5.Date⇄Calendarの変換** ### **Date→Calendar** Calendarクラスの新規インスタンスを作成 setTime(Date date)メソッドを使ってCalendarクラスのオブジェクトに変換 <pre><code>Date date = new Date(); // 今日の日付 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); System.out.println(calendar); // =>java.util.GregorianCalendar[time=1546228443561,areFieldsSet=true, ...] </code></pre> <br> ### **Calendar→Date** getTime()メソッドでDateクラスのオブジェクトに変換 <pre><code>Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2018); //年を設定 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); // => Mon Dec 31 13:01:05 JST 2018 </code></pre> <br><br> *** > **練習** >> **問題**[JEx8_1.java] 以下の変数を作成してください。<br> 型:char 変数名:hiragana 初期値:'あ'<br> 型:int 変数名:code 初期値:hiraganaのデータをintへキャスト
content
戻る