Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Java中必须在if语句之外声明变量_Java_Php - Fatal编程技术网

为什么在Java中必须在if语句之外声明变量

为什么在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

在Java中,如果我们运行:

公共类HelloWorld{ 公共静态无效字符串[]args{ 如果是真的{ int检验=1; }否则{ int检验=2; } 系统输出打印测试; } } 它将抛出:

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);