はじめに:「型が一致しません」はJavaに慣れてきた頃の定番エラー
Javaの文法に少し慣れてきて、変数を使ったり、メソッドを呼び出したりするようになると、次に出くわすのがこのエラーです:
エラー: 型が一致しません(Type mismatch: cannot convert from ○○ to △△)
これは、Javaにおいてとても基本的だけど、ちょっとわかりにくいエラーのひとつです。
なぜこのエラーが出るのか、どんなパターンで発生しやすいのか、そしてどう直せばいいのかを丁寧に見ていきましょう。
「型が一致しません」エラーの意味
Javaは厳格な型(データ型)を持つ言語です。
つまり、変数には「これは整数(int)です」「これは文字列(String)です」といったデータの種類(型)を明示的に伝える必要があります。
このエラーはつまり、
「その変数(または代入式)に使われている型が、指定されている型と合っていませんよ」
というJavaからのメッセージです。
よくあるエラー例と解説
よくある原因1:intとStringを混ぜる
間違った例:
int number = "100";
"100"
は文字列(String)であり、整数(int)ではないため、次のようなエラーになります。
エラー文:
Type mismatch: cannot convert from String to int
修正方法:
int number = Integer.parseInt("100"); // 文字列を数値に変換する
// または
int number = 100; // 直接数値を代入
よくある原因2:戻り値の型が違う
間違った例:
String text = getNumber();
public static int getNumber() {
return 123;
}
エラー文:
Type mismatch: cannot convert from int to String
修正方法:
String text = String.valueOf(getNumber());
// または
int text = getNumber();
よくある原因3:小数と整数の違い(doubleとint)
間違った例:
int value = 3.14;
エラー文:
Type mismatch: cannot convert from double to int
修正方法:
int value = (int) 3.14; // 明示的な型変換(キャスト)
double value = 3.14; // 型をdoubleに合わせる
エラー時に確認すべきポイント
- 変数の型と代入する値の型が一致しているか
- メソッドの戻り値と受け取り側の型が合っているか
- 暗黙の型変換ではなく、明示的なキャストが必要な場合もある
- プリミティブ型(int, double など)とラッパークラス(Integer, Double)の違いにも注意
復習クイズ:このコードは何が問題?
次のコードを見て、どこにエラーがあるか考えてみましょう。
public class Main {
public static void main(String[] args) {
int age = "25";
System.out.println(age);
}
}
まとめ:「型」はJavaにとって非常に重要なルール
- Javaでは変数・代入・戻り値などにおいて型の一致が求められる
- 「Type mismatch」エラーは、型の不一致が原因
- 対処法は「変数や戻り値の型を確認し、一致させる」こと
このエラーは、Javaの「型」の概念を理解する良いきっかけにもなります。
あせらず、ひとつひとつの型に注目してコードを見直していきましょう。
次回は、「null pointer exception(ヌルポ)」をテーマに解説していきます!
ますます「エラーに強いJava初心者」になっていきましょう!
コメント