if条件内で中括弧なしで変数を宣言するとコンパイラエラーが発生する 質問する

if条件内で中括弧なしで変数を宣言するとコンパイラエラーが発生する 質問する

なぜ最初のifコンパイルは成功し、2 番目のコンパイルは失敗するのでしょうか?

if(proceed) {int i;} // This compiles fine.
if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)

ベストアンサー1

言語仕様では次のように定められています。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html

宣言はプログラムにエンティティを導入し、このエンティティを参照するために名前で使用できる識別子 (§3.8) を含みます。宣言されたエンティティは次のいずれかです:
...
ローカル変数。次のいずれかです:
* ブロックで宣言されたローカル変数 (§14.4)
* for 文で宣言されたローカル変数 (§14.14)

最初の例はiブロック内で宣言しています (中括弧で示されています)。 2 番目の例はブロック内で宣言されておらず、ステートメントでもありませんfor

追加編集:それは常識的なことです。もし許可されたら、役に立たなくなります。すぐに範囲外になります。

おすすめ記事