在做某事的时候,我偶然发现了这段代码:
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
我错过了一些明显的东西吗?有人可以解释一下吗?
除非用大括号括起声明,否则不能在if语句中声明变量,因为声明必须具有范围.
这可以工作,因为变量是在if语句之外声明的:
String message; if(true) message = "Assignment possible"; System.out.println(message)
这不会通过编译,因为变量将在与周围代码相同的范围内声明,但只有在条件为真时才会声明,因此在所有情况下System.out.println(message)
都不会message
打印变量:
if(some condition) String message = "Time to leave earth"; System.out.println(message);
您的条件始终为真的事实并没有什么不同,因为编译器必须支持任何if条件的所有结果.
现在,当您使用花括号括起声明时,可以将声明的变量限制为新范围:
if(some condition) { String message = "Time to leave earth"; System.out.println(message); // this will pass compilation since message // is guaranteed to be found in this scope } System.out.println(message); // this won't pass compilation, since message is not // found in this scope