for文の第1項である初期化部では、複数の変数を同時に初期化できます。しかも、変数のスコープをforブロックの内側に制限したい場合、宣言もできるので便利です。
しかし、この時、型が等しい変数だけなら問題はありませんが、型の違う変数を指定すると、指定方法によって分かりづらいエラーが表示されることがあります。しかも、Eclipse上の場合と、javacによるコンパイルの場合でメッセージが異なるので注意が必要です。
例えば、int型の変数とlong型の変数の定義と初期化を、for文の第1項に指定すると、下記のように、Eclipseとjavacとで異なるエラーが表示されます。
javacのエラーメッセージは不親切で、ここに挿入できるidentifierはありません。また、Eclipseのエラーメッセージに従って「long」を外すわけにもいきません。
そこで、long型の変数の定義をfor文の前に行うと、今度はローカル変数が重複しているというエラーになってしまいます。
これは、for文の第一項が、単独の文で「int i = 0, l = 0;」とした場合と同様に「2つのint型の変数の定義と初期化」になってしまうからです。
よって、型の違う変数をfor文の第1項に指定することはできず、必要な場合の定義と初期化は、for文の前に行う必要がある訳です。
Copyright © ITmedia, Inc. All Rights Reserved.