最近我写了一段类似下面这样的代码:
switch (x) {
case a: case b: case c:
// do something
break;
case d: case e: case f:
// do something
break;
}
后来,我写了一个类似的代码,但存在语法错误:我忘记写case关键字:
switch (x) {
case a: b: c:
// do something
break;
case d: e: f:
// do something
break;
}
这种语法在其他一些语言中实际上是有效的,而且switch会通过所有的值。
实际上,在这里也是有效的,因为我没有收到任何语法错误:但程序的行为是错误的,它顺利地执行了switch,只是缺少了没有case关键字的值。
为什么?第二个片段中的b; c:、e:和f:是什么意思?
它们可能是标签吗?然后,它们怎么可能在同一行上?我不理解这个奇怪的非错误背后缺少了什么?
编辑:它们确实是标签。这很不寻常,正如@Bathsheba所解释的那样,问题在于标签通常出现在一行的开头。奇怪的是Java允许这种令人困惑(在我看来)的语法,甚至没有显示警告。这可能会在长程序中造成非常混乱和奇怪的错误。
谢谢。