Java中{if}的奇怪案例

时间:2015-12-23 09:05:49

标签: java if-statement

在做某事的时候,我偶然发现了这段代码:

if(true) {
    String message = "Assignment possible";
}

if(true)
    String message = "Time to leave earth";  // error!

为什么在第二种情况下可以在没有括号的情况下在java中编写'if'条件时出现编译错误?

错误消息似乎没有提供正确的信息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
String cannot be resolved to a variable
message cannot be resolved to a variable

我错过了一些明显的东西吗?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:14)

除非用大括号括起声明,否则不能在if语句中声明变量,因为声明必须有范围。

这可行,因为变量是在if语句之外声明的:

String message;
if(true)
    message = "Assignment possible";
System.out.println(message)

这不会传递编译,因为变量将在与周围代码相同的范围内声明,但只有在条件为真时才会声明,因此System.out.println(message)不会有{{1在所有情况下都要打印变量:

message

您的条件始终为真的事实并没有什么不同,因为编译器必须支持任何if条件的所有结果。

现在,当您使用花括号括起声明时,可以将声明的变量限制为新范围:

if(some condition)
    String message = "Time to leave earth";
System.out.println(message);

答案 1 :(得分:0)

String sql = "INSERT INTO user_f VALUES(\"" + email + "\", \"" + name + "\", \"" + pass + "\");"; 语句的受控语句可以是单个语句,也可以是块。单个声明不能是声明声明。