在做某事的时候,我偶然发现了这段代码:
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
我错过了一些明显的东西吗?有人可以解释一下吗?
答案 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 + "\");";
语句的受控语句可以是单个语句,也可以是块。单个声明不能是声明声明。