当我尝试运行此代码时:
public static void main(String[] args) {
double salary = 10.1;
if (salary >= 100.3)
double number = salary * 10;
else
double number = salary * 20;
}
我收到以下错误:
令牌“double”上的语法错误,删除此令牌
并且两者都是:
数字无法解析为变量
现在代码故意不好,因为这是一个问题,我们必须说明它的所有错误。
据我所知,最好不要两次声明相同的变量,最好总是使用花括号;但是,如果不使用花括号,为什么double number = salary * 10;
和double number = salary * 20;
会导致问题?我认为它仍然可以正确编译和运行(如果使用括号,它可以工作)。
答案 0 :(得分:4)
因为它违反了Java语法。 JLS defines if
statements如下:
IfThenStatement: if ( Expression ) Statement
所以它期待Statement
。大括号表示Block
和Block
is a Statement
。但是,变量声明不 a Statement
。 1
这是一种直觉上明智的行为 - 如果你可以在这里声明一个变量,它将毫无用处,因为它会立即超出范围。
<子> 1。令人困惑的是,变量声明在JLS中称为LocalVariableDeclarationStatement
。但是,就语言语法而言,这不是Statement
。