[Java][Tips] 変数の初期値(ローカル変数とフィールド)

意外と、普段からよくJavaを使っている方でも知らなそうなのが、Javaにおける変数の初期値ではないでしょうか。

static int a;
public static void main(String[] args) {

  System.out.println(a);

  int b;
  System.out.println(b);

  int[] c = new int[3];
  System.out.println(c[0]);

}

上記のコードで、コンパイルエラーになる変数はどれでしょうか?といわれたら、即答できますでしょうか。

答えはというと・・・「System.out.println(b);」だけなんですね。同じ変数でもフィールドには初期値が決められており、例えばint型であれば0があらかじめセットされます。ですからこの場合、aには初期値代入を明記しなくても0が入るのです。同じく、配列の初期化においても各要素の初期値が決められていますので、c[0]は0が入ります。

プログラミングの流儀として、変数は定義したままにするな、必ず明示的に初期値をセットしておけ、と教えられた人も多いと思います。私も、そんな部類の人間なので、実務で使うコードを書くときは習慣的にローカル変数でもフィールドでも初期値代入をしていたような気がします。なので恥ずかしながら社会人になって数年はこの事実を知らずにいました。

実際、初期値は決まってるんだから明記しないほうがいいのか、それでもやっぱり初期値代入は明記したほうがいいのか、考えどころですね。