【Java初心者】型変換とキャスト

代入時、演算時の自動的な型変換、明示的な型変換(キャスト)の仕組みと使い方について解説していきます。

型変換とは

intやStringなどのデータ型は、本来は変数宣言時に決めたものを使い続けます。しかし、コードを書いているうちに以下のような場面に遭遇することがあるはずです。

・整数で使っていた値にどうしても小数を交える必要がある
・数字として扱っているけれど文字列と一緒に使いたい

a = 7 / 3     ⇦正確に計算結果を出したいがaの値は3になってしまう
私の年齢は[18]才です。  ⇦文字列の中に数字を交ぜたい

こんな時に便利なのが型変換です。
型変換を利用すれば、文字列の間に計算結果の数字を挟んだり、整数同士の割り算の結果を小数点まで正確に出したりすることができます。

便利な自動型変と明示的型変換の2種類の型変換について説明していきます。

自動型変換

変数に値を代入する際は、基本的に変数の型と同じデータ型の値を代入します。
演算子を使って計算をする際は、普通は演算子の前後の値は同じデータ型を使用する必要がありますが、特定の状況において違うデータ型の値同士も演算することができます。

Javaが計算を行う際に型を自動的に判断して変換してくれることを自動型変換と言います。

自動型変換は、代入時と演算時にJavaが勝手に判断してくれる非常に便利な機能ですが、もちろん変換できない値はコンパイルエラーになってしまうので気をつけましょう。

数値型変数の大小関係

数値型データの自動型変換の際に意識する必要があるのは、データ型の大小関係です。この関係を覚えておけばデータ型の自動変換とうまく付き合っていけます。

異なる型への代入時の自動型変換

Javaの数値型の変数の計算では、小さなデータ型の値を大きなデータ型の変数に代入する場合に限り、自動的に大きい方のデータ型に変換されます。

異なる型同士の演算時の自動型変換

異なるデータ型同士で演算を行う場合、演算子の前後の要素が大きいデータ型に統一されて演算を行います。

2 + 3.0    ⇨   5.0
7 / 2        ⇨   3
7 / 2.0    ⇨   3.5

文字列との演算時の自動型変換

計算式に文字列が含まれている場合、計算結果は文字列型になります。
文字列型の数字と数値型の数字を加算しても計算は行われないので注意が必要です。

"りんごの数は" + 10 + "個です"     ⇨     "りんごの数は10個です"
"1"  +  2                                          ⇨     "12" 

明示的型変換

自動的型変換では、大きなデータ型を小さなデータ型に変換することはできませんでした。そこで、私たち人間がコンピュータに対して、型の大小に関わらずデータ型の変換を要求することを明示的型変換と言います。

明示的型変換を行うには、型変換の指示を意味するキャスト演算子を使用します。

キャスト演算子とは、代入する値の前に()でくくった変換したいデータ型を記載することです。

キャスト演算子はデータ型を意識せずに強制的に変換を行うため、データの一部を失ってしまう可能性もあります。少数から整数への変換などを行った場合には、小数点以下が切り落とされてしまいます。

int  age  =  (int)  24.5;   ⇨   ageの値は小数点以下が切り落とされて[24]になる。

キャスト演算子は、データ型を無理矢理変換してしまうものであるため、計算式などで使用すると意図しないデータを作ってしまうことになるため、基本的には使用しないものと認識しておきましょう。

以上、参考になった方もならなかった方もありがとうございました!