以下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语句级别?
声明不是“运行”-不需要执行声明,它们只是告诉编译器变量的类型。(将运行一个初始化程序,但这很好-您在分配变量值之前不尝试读取该变量。)
switch语句中的作用域绝对是奇怪的,但是基本上在第一个声明的变量case
仍然在第二个的范围内case
。
块中的局部变量声明的范围(第14.4节)是该声明在其中出现的其余部分,从其自身的初始化程序开始,并在该局部变量声明语句的右侧包括其他任何声明符。
除非您创建额外的块,否则整个switch语句都是一个块。如果需要每种情况的新作用域,则可以使用花括号:
case 1: {
int y = 7;
...
}
case 2: {
int y = 5;
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句