public static void main(String[] args) {
int[] arr = {0,1,2,3,4,5,6,7};
switch (arr[2]) {
case 1:
ArrayList list = new ArrayList();
list.add(1);
list.add(2);
System.out.println(list.size()+"PPPP");
break;
case 2:
list = new ArrayList();
System.out.println(list.size());
break;
default:
break;
}
为什么这么写case 2 arraylist还可以定义? 依照代码case 1 应该没进行,那么case 2 是怎么定义的?arraylist也不是全局变量,求大神解答
这是switch..case中变量的作用域问题, 你这样声明的变量会被提前到switch前面所以的case共用该声明的变量; 但是给声明变量的case加大括号{..}就不会了...
你可以看下 https://zhidao.baidu.com/question/305369922252396084.html
你运行过了没有 /斜眼笑
这里case1 和 case2是两个独立的分支,list的作用域是分开的,这个是确定的
在case1里面的list感觉是用的case1中的定义,但是caes1中的list操作在case2中是不起作用的,应该是用了同一个namespace,而存储是没有关联的。本质意义上来说,两个list还是两个。操作上不存在关联性。
不用太纠结,你理解的方式是对的,这个湾要转一下:
参看下这个看看:
http://www.itroad.net/html/2017/go_0116/195.html
整个switch是一个代码块,所以你这样写的时候编译没报错,但是运行的时候就能检查出list没定义了。毕竟人家的检错机制没那么强大
假设传入值是1 并且没有break 那么这两段代码就是一个整体。