【Java】incompatible typesエラー リテラルとデータ型

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 大文字L123456L
float型少数の末尾に小文字f or 大文字F1.0F
double型少数1.0
boolean型true or falsetrue
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というエラーメッセージが出た場合、リテラルの表記方法(サフィックス)を確認することで解決します。