java 如何在 switch case 语句中声明范围?
How does java scope declarations in switch case statements?
以下 java 代码在 Java 1.7
中执行没有错误
public static void main(String[] args) {
int x = 5;
switch(x) {
case 4:
int y = 3423432;
break;
case 5: {
y = 33;
}
}
}
java 如何确定 y 是一个整数,因为声明永远不会 运行。当 case 语句中未使用大括号时,case 语句中的变量声明是否会限定在 switch 语句级别?
声明不是 "run" - 它们不是需要执行的东西,它们只是告诉编译器变量的类型。 (初始值设定项会 运行,但这没关系 - 您不会在为变量赋值之前尝试读取变量。)
switch 语句中的范围肯定很奇怪,但基本上第一个 case
中声明的变量仍在第二个 case
的范围内。
The scope of a local variable declaration in a block (§14.4) is the rest of the block in which the declaration appears, starting with its own initializer and including any further declarators to the right in the local variable declaration statement.
除非您创建额外的块,否则整个 switch 语句是一个块。如果你想为每个案例一个新的范围,你可以使用大括号:
case 1: {
int y = 7;
...
}
case 2: {
int y = 5;
...
}
案例本身不声明范围。范围受限于 {
和 }
。因此,您的变量 y
在外部范围(整个开关)中定义并在内部范围(case 5
)中更新。
据我所知,完整的 switch 语句是一个作用域。
没有休息;或 return;声明其他开关案例也将被解释。所以当你在 switch 语句中定义一个变量时,它在 hole switch case 中是可见的。
以下 java 代码在 Java 1.7
中执行没有错误public static void main(String[] args) {
int x = 5;
switch(x) {
case 4:
int y = 3423432;
break;
case 5: {
y = 33;
}
}
}
java 如何确定 y 是一个整数,因为声明永远不会 运行。当 case 语句中未使用大括号时,case 语句中的变量声明是否会限定在 switch 语句级别?
声明不是 "run" - 它们不是需要执行的东西,它们只是告诉编译器变量的类型。 (初始值设定项会 运行,但这没关系 - 您不会在为变量赋值之前尝试读取变量。)
switch 语句中的范围肯定很奇怪,但基本上第一个 case
中声明的变量仍在第二个 case
的范围内。
The scope of a local variable declaration in a block (§14.4) is the rest of the block in which the declaration appears, starting with its own initializer and including any further declarators to the right in the local variable declaration statement.
除非您创建额外的块,否则整个 switch 语句是一个块。如果你想为每个案例一个新的范围,你可以使用大括号:
case 1: {
int y = 7;
...
}
case 2: {
int y = 5;
...
}
案例本身不声明范围。范围受限于 {
和 }
。因此,您的变量 y
在外部范围(整个开关)中定义并在内部范围(case 5
)中更新。
据我所知,完整的 switch 语句是一个作用域。 没有休息;或 return;声明其他开关案例也将被解释。所以当你在 switch 语句中定义一个变量时,它在 hole switch case 中是可见的。