最近碰巧写了一段类似这样的代码:
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 如何允许这种令人困惑的(在我看来)语法,甚至没有显示警告。 这确实会在长程序中造成很多困惑和奇怪的错误。
谢谢。
最佳答案
在第二种情况下,b:
、c:
、e:
和f:
是< em>标签。在 Java 中,您可以break
到标签,并且该语言允许您在各种地方插入标签,包括您拥有的地方。
看到标签不在一行的开头是不寻常的,仅此而已。
关于java - 这段Java代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41189239/