为什么不能在没有花括号的循环中为整数赋值int?

Twe*_*les 9 java

可能重复:
为什么这不是用Java编译的?

在java中,花括号对于循环的一行是可选的,但是我发现了一个不允许的情况.例如,这段代码:

for(int i = 0; i < 10; i++)
    Integer a = i;
Run Code Online (Sandbox Code Playgroud)

不会编译,但如果你添加花括号,如下:

for(int i = 0; i < 10; i++){
    Integer a = i;
}
Run Code Online (Sandbox Code Playgroud)

它会.为什么这段代码不能编译?

Mar*_*ers 11

因为在单行语句中声明一个新变量是没有意义的,因为它立即超出范围.

如果查看Java中语句的定义,它不包含LocalVariableDeclarationStatement,而块包含.


SLa*_*aks 8

如果你没有花括号,你就不能放入变量声明.(变量没用)

请参阅规范.(LocalVariableDeclarationStatement只能直接在Block内部出现.)