Javaでは異なるデータ型の値を変数に代入する際に「型変換」が発生します。
型変換には「暗黙の型変換」と「キャスト(明示的な型変換)」の2種類があり、それぞれの仕組みを理解することが重要です。
本記事では、図解を交えながらJavaの型変換について詳しく解説します。
初心者の方も安心して学べるよう、基本から応用まで丁寧に説明しますので、ぜひ最後までご覧ください!
Javaの基本データ型一覧
型変換の仕組みを理解するには、まずJavaの基本データ型について知ることが重要です。以下に一覧表を示します。
種類 | データ型 | サイズ | 表現できる値 |
整数 | byte | 8ビット | -128~127 |
short | 16ビット | -32768~32767 | |
int | 32ビット | -2147483648~2147483647 | |
long | 64ビット | -9223372036854775808~ 9223372036854775807 | |
不動小数点数 | float | 32ビット | IEEE754に基づく値 |
double | 64ビット | IEEE754に基づく値 | |
文字 | char | 16ビット | Unicode表現の \u0000~\uFFFF |
真偽 | boolean | – | true, false |
以下の記事データ型に関する記事も参考にしてください。

型変換の2種類:「暗黙の型変換」と「キャスト」
Javaの型変換は「暗黙的の型変換」と「キャスト(明示的な型変換)」の2つ
Javaにおいては以下の2つの型変換によって、左辺と右辺のデータ型が一致せずとも変数の代入を行うことができます。
- 「暗黙の型変換」
- 「キャスト(明示的な型変換)」
Javaの型変換の例
Javaにおいては基本的には以下のように、変数の代入時に左辺と右辺のデータ型を一致させて宣言します。
long number = 123L; // 最後の「L」はlong型であることを示す
しかし、変数の代入時に左辺と右辺のデータ型は必ずしも一致する必要はありません。以下の2パターンの場合です。
【①暗黙の型変換】
long number = 123; // 「123」はint型
【②キャスト(明示的な型変換)】
double number = (double)123L; // numberの値は「123.0」
①暗黙の型変換(ワイドニング)とは?
小さな型を大きな型に代入する事は可能です。
// int→floatに変換。
// fはfloat型の「10.0」となる。
float f = 10;
// まず右辺の「10 + f」で10がint→floatに変換される。
// そして左辺との変換においてfloat→doubleになる。
// dはdouble型の「20.0」
double d = 10 + f;
明示的に型の変換を行わなくても、コンパイルの時に型を変換してくれるからです。
つまり、左の型から右の型への代入は可能ということになります。
- byte → short → int → long → float → double
※char は int以降への代入が可能
図にするとこんな感じでしょうか。
「大きな箱」に「小さな箱」を入れるのはOKだが、その逆はNGといったイメージです。
ちなみに、この方向の型変換のことを「ワイドニング(Widening)」と言ったりします。結果的に「小さな箱」が「大きな箱」に変換されるからですね。
②キャスト(明示的な型変換・ナローイング)とは?
「①暗黙的な型変換」とは反対に、「大きな箱」から「小さな箱」に変換するには、「(変換させたいデータ型)」という「キャスト演算子」をつけることで実現することができます。
// 「1.23」はdouble型。double→floatに変換
float f2 = (float)1.23;
// 「10.1」はdouble型。
// intへの変換で右辺は「10<10」となることから、boolはfalse。
boolean bool = 10 < (int)10.1;
明示的に型変換をする必要があるというわけです。
キャスト演算子:「(変換させたいデータ型) 対象の値(変数)」
図にするとこんな感じ。

また、この方向の型変換のことを「ナローイング(Narrowing)」と呼びます。「大きな箱」を「小さな箱」に強制的に変換するからですね。
キャスト時の注意点
なお、以下のようにキャストした場合など、値が変わってしまうことがあるため注意しましょう。
- 大きいサイズから小さいサイズに型変換した場合、データの溢れのため、上位ビットの値が切り捨てられる
// byteの範囲は「-128~127」のため「128」ではデータ溢れ
// bは-128
byte b = (byte)128;
- 少数から整数に変換する際は、小数点以下が切り捨てられる。
// double→intへの変換で小数点以下が切り捨てられる
// valは24
int val = (int)(123 * 0.2);
まとめ:Javaの型変換を使いこなそう
「①暗黙の型変換」と「②キャスト(明示的な型変換)」に関して最後に図にしてみました。

- Javaにおいては「①暗黙的な型変換」または「②キャスト(明示的な型変換)」によって、左辺と右辺のデータ型が一致せずとも変数の代入を行うことができる。
- 「①暗黙的な型変換」では、小さな型を大きな型に暗黙的に代入することができる。
- 「②キャスト(明示的な型変換)」では反対に大きな型を小さな型に明示的(強制的)に変換する必要がある。(値が変わってしまうこともあるため注意。)
この記事が理解を深める一助となれば幸いです。