我有一个关于Java开关的疯狂问题。声明和初始化Java开关内的变量
int key = 2;
switch (key) {
case 1:
int value = 1;
break;
case 2:
value = 2;
System.out.println(value);
break;
default:
break;
}
场景1 - 当key
是二它成功打印的价值为2
场景2 - 当我要去case 2:
评论value = 2
它叫声称局部变量的值可能没有已初始化为。
问题:
方案1:如果执行流不会去case 1:
(当key = 2
),那么它是如何知道变量的值作为int
的类型?方案2:如果编译器知道值变量的类型为int
,那么它必须访问表达式case 1:
(声明和初始化)。那么为什么它sqawrk当我要在case 2:
value = 2
评论,说本地变量值可能尚未初始化。
这不是一个疯狂的问题,这是一个非常好的问题。 – biziclop
[变量在开关盒中的范围]的可能重复(http://stackoverflow.com/questions/3894119/variables-scope-in-a-switch-case) –
@PhilippeCarriere其实,我认为它应该是相反的 - 这里的答案更好(即使帖子更新),因为直接引用了JLS,并且在该帖子的不同答案中涵盖了该问题。 [另见](http://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers)。 – Tunaki