はじめに
こんにちは!Javaを学習中の皆さん。
変数の型を変換しようとして、こんなエラーに遭遇したことはありませんか?
あるいは、エディタにこんな風に赤い波線で怒られたり…
「.class
がありませんってどういうこと?」「ただ型を変えたいだけなのに…」
私も先日、double
型の値をint
型に入れようとして、このエラーで少しの間ハマってしまいました。
この記事では、このエラーの原因と、Javaにおける正しい「型変換(キャスト)」の方法について、私の失敗談を元に解説していきます。
エラーが発生したコード(失敗例)
私が最初に書いてしまったのが、こちらのコードです。
double
型の変数d
の値を、int
型の変数i
に入れようとしました。
// これはエラーになるコードです
int i = int d;
「int
型のi
に、int
にしたd
を入れる…」と、頭の中のイメージをそのままコードにした結果ですが、残念ながらこれはJavaの文法として間違いでした。
Javaのコンパイラは int d
の部分をどう解釈していいか分からず、'.class'がありません
という少し分かりにくいエラーを出力してしまったようです。
正しい型変換「キャスト」の書き方
エラーを解決するためには、キャスト演算子というものを使う必要がありました。
キャスト演算子とは (変換したい型)
のように、型名をカッコで囲んだものです。
これを使って、先ほどのコードを正しく修正したのがこちらです。
int d
と書くのではなく、(int)d
のように、変換したい値の前にカッコで型を指定するのが正解だったのです。
「キャスト」の挙動と注意点
この正しい書き方を理解した上で、もう一つ重要なポイントがあります。
それは、double
(浮動小数点数)から int
(整数)へのキャストは、小数点以下が切り捨てられるというルールです。
例えば、0.5
を int
にキャストすると、四捨五入されて 1
になるのではなく、小数点以下がバッサリ切り捨てられて 0
になります。
この点を踏まえて、最終的に完成したコード全体を見てみましょう。
完成したコードと実行結果
このコードの流れを追ってみましょう。
-
double d = 0.5;
d
という変数に0.5
が入ります。 -
System.out.println(d);
画面に0.5
と表示されます。 -
int i = (int) d;
d
の値0.5
をint
にキャストします。小数点以下が切り捨てられるので、変数i
には0
が代入されます。 -
i = 3;
変数i
の値が0
から3
に上書きされます。 -
System.out.println(i);
最終的なi
の値である3
が画面に表示されます。
そして、このコードを実行した結果がこちらです。
意図した通りの結果になりました!
まとめ
今回は、Javaの型変換(キャスト)における、よくあるつまずきポイントを解説しました。
- ある型の値を別の型に変換するには、キャスト演算子
(型名)
を使う。 -
double
からint
へのキャストでは、小数点以下は切り捨てられる。 - 一見関係なさそうなエラーメッセージでも、実は基本的な文法ミスが原因だったりする。
エラーはプログラミング学習の最高の友達です。一つ一つのエラーと丁寧に向き合うことで、着実に力がついていきます。
この記事が、同じエラーで悩んでいる誰かの助けになれば幸いです。
Happy Coding!