文字列連結の + とカンマの違い
+ は連結、カンマは引数の区切り。左から評価される性質による計算結果のずれも扱います。
エラーメッセージの読み方
Main.java:4: error: no suitable method found for println(String,int)
Main.java- ファイル名
4- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
no suitable method found for println(String,int)- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 public class Main { 2 public static void main(String[] args) { 3 int n = 5; 4 System.out.println("n = " , n); ^ 5 } 6 }
Main.java:4: error: no suitable method found for println(String,int)
Javaの文字列連結は + です。カンマ区切りは文法上printlnへの2引数呼び出しになりますが、Stringとintを2つ受け取るprintlnは存在しません。
直し方: , を + にします。
広告
広告スロット(未設定)
パターン2
1 public class Main { 2 public static void main(String[] args) { 3 System.out.println(1 + 2 - "点"); ^ 4 } 5 }
Main.java:3: error: bad operand types for binary operator '-'
数値と文字列を + でつなぐと文字列連結になります。左から順に評価されるので 1+2 は先に3になります。
直し方: - を + にします。
パターン3
1 public class Main { 2 public static void main(String[] args) { 3 System.out.println("" + 1 + 2 + "点"); ^ 4 } 5 }
出力: 12点期待: 3点 (コンパイルは通っています)
先頭が文字列だと、以降すべてが連結になります。数値計算を先にしたいときは括弧で囲みます。
直し方: "" + 1 を 1 にします。
パターン4
1 public class Main { 2 public static void main(String[] args) { 3 String name = "Taiyo"; 4 System.out.println("Hello " name); ^ 5 } 6 }
Main.java:4: error: ')' expected
文字列と変数の間には + が必要です。何も書かずに並べると、そこで式が終わったと解釈されます。
直し方: (空) を + にします。
パターン5
1 public class Main { 2 public static void main(String[] args) { 3 int age = 20; 4 System.out.println(age , "歳"); ^ 5 } 6 }
Main.java:4: error: no suitable method found for println(int,String)
カンマ区切りは文法上は2引数の呼び出しとして成立しますが、intとStringを2つ受け取るprintlnは存在しません。連結したいときは + を使います。
直し方: , を + にします。
よくある誤解
+ は左から順に評価されます。1 + 2 + "点" と "点" + 1 + 2 で結果が変わります。
まとめ
文字列連結の + とカンマの違いは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。