【发布时间】:2012-06-04 08:42:05
【问题描述】:
我有一个关于 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。
场景 2 - 当我要在 case 2: 中评论 value = 2 时,它会大声说 局部变量值可能尚未初始化。
问题:
场景一:如果执行流程不去case 1:(当key = 2),那么它怎么知道值变量的类型为int?
场景 2:如果编译器知道 value 变量的类型为 int,那么它一定已经访问了 case 1: 中的 int value = 1; 表达式。(声明和初始化)。那为什么它会发出嘶嘶声当我要在case 2: 中评论value = 2 时,说局部变量值可能尚未初始化。
【问题讨论】:
-
这不是一个疯狂的问题,这是一个非常好的问题。
-
@PhilippeCarriere 实际上,我认为它应该是相反的 - 这里的答案更好(即使帖子更新),因为直接引用了 JLS,并且很好地总结了不同的问题在那篇文章中的答案。 See also.
-
@Tunaki 重复的描述以“这个问题以前被问过”开头。我正在阅读,因为后一个应该被标记为前一个的副本。但我确实同意这个有很好的元素。也许他们应该以某种方式合并?
-
还有很多关于 SO 的问题都被标记为我原来的问题的重复,所以如果你决定最好把这个标记为新的原始问题,请修复所有链接以引用这个问题而不是我的。
标签: java scope initialization switch-statement declaration