最近我碰巧写了一段与此类似的代码:
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;
}
在某些其他语言中,此语法实际上是有效,并且交换机会传递所有值。
实际上这里也是有效的,因为我没有得到任何语法错误:但是顺利执行切换的程序的错误行为,只缺少没有case关键字的值。
为什么呢?什么是b; c:,e:和f:意思是第二个片段?
他们可能是标签吗?然后,他们怎么可能在同一条线上呢?我错过了什么,我不明白这个奇怪的非错误背后?
编辑:它们似乎确实是标签。这很不寻常,正如@Bathsheba所解释的那样,问题在于标签通常在一行的开头。奇怪的是Java如何在我的脑海中使用这种令人困惑的语法,甚至没有显示警告。 这可能会在长程序中造成很多混乱和奇怪的错误。
谢谢。
答案 0 :(得分:5)
在第二种情况下,b:
,c:
,e:
和f:
是标签。您可以break
使用Java中的标签,并且该语言允许您在各种地方插入标签,包括您拥有的地方。
看到标签不是从一行的开始就是不寻常的,这就是全部。