imcompatible type エラーは、データ型とリテラルの不一致で発生します。
本記事では、このエラーに触れつつ、Javaでデータ型とリテラルの関係性をまとめました。
リンク
データ型とは
プログラムで扱うデータの種類であり、整数型や少数型、文字型などあります。
Javaの基本的なデータ型は以下の通り。
データ型 | データ範囲 |
byte型 | -128~127の整数 |
short型 | -32768~32767の整数 |
int型 | -2147483648~2147483647の整数 |
long型 | -9223372036854775808~9223372036854775807の整数 |
float型 | 単精度浮動小数点 |
double型 | 倍精度浮動小数点 |
char型 | 文字 |
String型 | 文字列 |
整数型や少数型でもリテラルの大きさによって何種類かあります。
では、そのリテラルとは何でしょうか。
リテラルとは
リテラルは、プログラムで書かれている具体的な値を指します。
文字列型でHelloWorldと宣言すれば、そのHelloWorldがリテラルになります。
このリテラルの表記方法によって、どのデータ型のリテラルか機械が判断します。
ゆえに仮にデータ型の宣言してもそのデータ型にあったリテラル表記をしないとエラーになります。
例:
int num = '5';
// 整数型に文字型を代入しているのでエラー
char h = "H";
// 文字型に文字列型を代入しているのでエラー
リテラルの表記方法(サフィックス)
データ型 | リテラルの表記方法(サフィックス) | 例 |
byte型 | 整数 | 123 |
short型 | 整数 | 1234 |
int型 | 整数 | 12345 |
long型 | 整数の末尾に小文字l(エル) or 大文字L | 123456L |
float型 | 少数の末尾に小文字f or 大文字F | 1.0F |
double型 | 少数 | 1.0 |
boolean型 | true or false | true |
char型 | シングルクォーテーションで囲まれた1文字 | ‘a’ |
String型 | ダブルクォーテーションで囲まれた文字列 | “abc” |
この表記方法にしないと以下のようなエラーメッセージが出ます。
incompatible types エラー
例:float型でF付け忘れ(double型)、String型でシングルクォーテーション(char型)
error: incompatible types: possible lossy conversion from double to float
float f = 1.0;
^
var.java:9: error: incompatible types: char cannot be converted to String
String s = 's';
incompatible typesというエラーメッセージが出た場合、リテラルの表記方法(サフィックス)を確認することで解決します。