如果你给
public class test
{
public static void main(String ar[])
{
if (true)
int i=0;
}
}
Run Code Online (Sandbox Code Playgroud)
它不是编译,但带括号的相同代码是:
public class test
{
public static void main(String ar[])
{
if (true)
{int i=0;}
}
}
Run Code Online (Sandbox Code Playgroud)
解释是什么?
Jon*_*eet 27
变量声明基本上只能在块中声明.
查看 Java语言规范中"语句"的语法 - 它包括Block,但不包括LocalVariableDeclarationStatement - 后者是块语法的一部分.
这实际上是一个实用主义问题:如果你没有支撑,你只能使用一个声明.如果没有后续语句,则声明变量没有意义,因为您无法使用该变量.你可能只有一个没有变量声明的表达式语句 - 这是允许的.
这可以防止错误,例如:
if (someCondition)
int x = 0;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
乍一看可能看起来不错,但实际上相当于:
if (someCondition)
{
int x = 0;
}
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
就个人而言,无论如何我总是使用大括号,因为它会使这种类型的bug更难创建.(我曾经被它咬过一次,发现有问题的代码真的很棘手.)