以下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是一个int,因为声明永远不会运行。在case语句中没有使用大括号时,case语句中的变量声明是否限定为switch语句级别?
答案 0 :(得分:9)
声明不是“运行” - 它们不是需要执行的东西,它们只是告诉编译器变量的类型。 (初始化程序会运行,但是没关系 - 在为其赋值之前,你不会尝试读取变量。)
在switch语句中确定范围绝对是奇怪的,但基本上第一个case
中声明的变量仍然在第二个case
范围内。
块中的局部变量声明的范围(第14.4节)是声明出现的块的其余部分,从其自己的初始化器开始,并包括局部变量声明语句中右侧的任何其他声明符。 / p>
除非您创建额外的块,否则整个switch语句是一个块。如果您想为每个案例设置一个新范围,可以使用大括号:
case 1: {
int y = 7;
...
}
case 2: {
int y = 5;
...
}
答案 1 :(得分:1)
案例本身并未声明范围。范围受{
和}
限制。因此,您的变量y
在外部范围(整个开关)中定义,并在内部范围(case 5
)中更新。
答案 2 :(得分:0)
据我所知,完整的switch语句是一个范围。 没有休息;或返回;声明其他开关案例也将被解释。因此,当您在switch语句中定义变量时,它在孔开关盒中可见。