public class Main {
public static void main(String[] args) {
int i=0;
if( i == 0){
int j;
}
else{
int j;
}
}
}
为什么它不会为int j
的多重声明提供错误?
答案 0 :(得分:2)
因为第一个j
位于然后分支,而第二个位于其他分支 ...
其他然后有两个不同的范围,所以如果以这种方式声明相同的变量就没有问题..
范围由{
和}
分隔。
您的代码与此相同:
public class Main {
public static void main(String[] args) {
int i=0;
int j;
if( i == 0){
j = 1;
}
else{
j = 2;
}
}
}
答案 1 :(得分:2)
if
和else
都有不同的范围。
if
中声明的变量只能在if
及其任何子项中使用
同样,else
中声明的变量只能在else
及其任何子项中使用
详细了解变量范围以获取更多信息。
答案 2 :(得分:0)
因为两个“j”在不同范围内,一个在If分支中,另一个在其他分支内
if(i == 0) { // First scope starts
int j;
} // First scope ends if j destroyed here
else { // Second scope starts
int j;
} // Second scope ends else j destroyed here
答案 3 :(得分:0)
在java中,有一个名为作用域的东西。如果在括号内声明变量,则仅在这些括号内知道。
例如,
public static void main(String[] args)
{
if(true)
{
int jellyBean = 100;
System.out.println("You can use this variable here" + jellyBean );
}//When the code comes to this bracket, the jellyBean variable is destroyed and can be redeclared.
System.out.println("You cannot use this variable here because it's not declared" + jellyBean );//Will produce error
int jellyBean = 10; //Perfectly valid code because the previous variable has been destroyed
}
答案 4 :(得分:0)
只会执行一个范围,因此只会创建一个范围。如果条件(i == 0)不为真,它将不会进入范围,它将进入else范围并创建整数j。如果(i == 0)它将进入范围并创建j;它永远不会进入其他范围。所以无论如何变量j只会被声明一次。
答案 5 :(得分:0)
这只是因为局部变量作用域,只要你打开一个块({
)并关闭块(}
),局部变量就有了作用域
在这里你要在两个区块内声明int j
public class Main {
public static void main(String[] args) {
int i=0;
if( i == 0){
int j; // here j has scoped in if block
}
else{
int j; // and here j has scoped in else block
}
}
}
java编译器知道在不同的作用域see documentation
中有两个j