Code Fix

中級

i++ と ++i の違い

評価される値のタイミングが違います。i = i++ が何も変えない理由も解説します。

なぜエラーが出ないのか

出力: 0
(エラーなし)
javacは何も報告しません。文法として正しいためです
出力: 0
実際の挙動 — 期待した結果と食い違っている箇所
見つけ方
エラーが出ないので、出力を目で確かめるしかありません。この種の誤りが最も発見が遅れます

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

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          int i = 0;
 4          System.out.println(i++  );
                                 ^
 5      }
 6  }
出力: 0期待: 1 (コンパイルは通っています)

i++ は インクリメント前の値を返します。先に増やしてから使うなら ++i です。

直し方: i++++i にします。

この問題を解いてみる →

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

パターン2

 1  public class Main {
 2      public static void main(String[] args) {
 3          int i = 5;
 4          i = i++    ;
                   ^
 5          System.out.println(i);
 6      }
 7  }
出力: 5期待: 6 (コンパイルは通っています)

i = i++ は元の値を代入し直すため何も変わりません。自己代入とインクリメントを混ぜないのが安全です。

直し方: i++i + 1 にします。

この問題を解いてみる →

よくある誤解

ループの i++ と ++i は結果が同じです。違いが出るのは、その値を使うときだけです。

まとめ

i++ と ++i の違いは中級でつまずきやすい項目です。上の2パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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