当前位置:  开发笔记 > 编程语言 > 正文

Java中"if"的奇怪案例

如何解决《Java中"if"的奇怪案例》经验,为你挑选了1个好方法。

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

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

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



1> Eran..:

除非用大括号括起声明,否则不能在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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有