为什么在Java中必须在if语句之外声明变量
在Java中,如果我们运行: 公共类HelloWorld{ 公共静态无效字符串[]args{ 如果是真的{ int检验=1; }否则{ int检验=2; } 系统输出打印测试; } } 它将抛出:为什么在Java中必须在if语句之外声明变量,java,php,Java,Php,在Java中,如果我们运行: 公共类HelloWorld{ 公共静态无效字符串[]args{ 如果是真的{ int检验=1; }否则{ int检验=2; } 系统输出打印测试; } } 它将抛出: HelloWorld.java:9: error: cannot find symbol System.out.println(test); ^ symbol: variable test location: class
HelloWorld.java:9: error: cannot find symbol
System.out.println(test);
^
symbol: variable test
location: class HelloWorld
1 error
但是,在php中,如果我们运行:
这与静态和动态类型之间的差异无关。Java和PHP之间的区别在于变量范围 PHP$test=1;将成为全球范围的一部分 在Java中,int test=1;将是本地范围的一部分,在您的情况下仅限于if块
Java是块范围的;在一个{}块中引入的东西会在该块的末尾消失 PHP是函数范围的;函数内部引入的内容将持续到函数结束。如果不在函数中,则该变量是全局变量,并持续到程序完成
在这两种语言中,一旦某个变量超出范围,它就会被垃圾收集。在Java中,变量的可见性范围受到{}的限制 注意如下所示的死代码也很重要:
int test;
if (true) {
test = 1;
} else {
test = 2;// Dead code
}
System.out.println(test);
由于if为true,else块将永远不会执行,导致test=2成为死代码。@JoshuaBurt我更关心的是为什么php和Java的行为不同。幸运的是,其中一个答案解决了我的难题。php是功能范围,而Java是阻塞范围
int test;
if (true) {
test = 1;
} else {
test = 2;// Dead code
}
System.out.println(test);