Code Fix

初級

char と String のクォートの違い

シングルクォートとダブルクォートは互換性がありません。エスケープの書き方も合わせて扱います。

エラーメッセージの読み方

Main.java:3: error: incompatible types: String cannot be converted to char
Main.java
ファイル名
3
行番号 — javacが異常に気づいた位置。原因の行とは限りません
error
種別 — コンパイルエラー。実行まで到達しません
incompatible types: String cannot be converted to char
内容 — javacが期待していたもの、または見つけられなかったもの

このエラーが出る典型パターン

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          char c = "A";
                      ^
 4          System.out.println(c);
 5      }
 6  }
Main.java:3: error: incompatible types: String cannot be converted to char

charはシングルクォート、Stringはダブルクォートです。Javaではこの2つに互換性がありません。

直し方: "A"'A' にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  public class Main {
 2      public static void main(String[] args) {
 3          String s = 'hello';
                          ^
 4          System.out.println(s);
 5      }
 6  }
Main.java:3: error: unclosed character literal

シングルクォートは1文字専用です。2文字以上を囲むと文字リテラルとして閉じられないと判断されます。

直し方: 'hello'"hello" にします。

この問題を解いてみる →

パターン3

 1  public class Main {
 2      public static void main(String[] args) {
 3          System.out.println("He said " hi\"");
                                         ^
 4      }
 5  }
Main.java:3: error: ')' expected

文字列の中でダブルクォートを使うにはバックスラッシュでエスケープします。そのまま書くと文字列がそこで終わります。

直し方: "\" にします。

この問題を解いてみる →

パターン4

 1  public class Main {
 2      public static void main(String[] args) {
 3          char[] letters = "abc"          ;
                                    ^
 4          System.out.println(letters[0]);
 5      }
 6  }
Main.java:3: error: incompatible types: String cannot be converted to char[]

文字列とchar配列は別の型です。1文字ずつのchar初期化子として書く必要があります。

直し方: "abc"{'a', 'b', 'c'} にします。

この問題を解いてみる →

パターン5

 1  public class Main {
 2      public static void main(String[] args) {
 3          char c = ''   ;
                       ^
 4          System.out.println(c);
 5      }
 6  }
Main.java:3: error: empty character literal

シングルクォートは必ず1文字を挟みます。中身が無いと空の文字リテラルとしてエラーになります。

直し方: ''' ' にします。

この問題を解いてみる →

よくある誤解

他言語ではクォートの種類を区別しないものが多く、その癖がそのまま事故になります。Javaでは互換性がありません。

まとめ

char と String のクォートの違いは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)