对每个switch语句的值有什么限制

时间:2015-05-01 14:32:14

标签: java switch-statement

对于这个问题,我看到了像这样的答案在编译期间,switch语句的每个case的值必须计算为可以提升为int值的值但是我没有理解为什么因为我们也使用byte,short,int,char但是这句话只说了int所以请解释我并给我一个例子

2 个答案:

答案 0 :(得分:2)

在Java 5中引入了枚举类型,同时增强了switch语句以允许切换enum值。

这使得引用的陈述无效:

  

“[d] uring compilation,switch语句的每个case的值必须计算为一个可以提升为int值的值”

...除非它引用Java 1.4.x或更早版本。

它的含义是案例值必须为byteshortcharint。 (这些是唯一可以使用其值的类型 在Java 5之前提升为int ...在Java 5中也引入了包装类型的拆箱。)

当然,Java 5中的情况已经不再适用。在Java 5及更高版本中,常量可以是enum值,在Java 7及更高版本中,它们也可以是String值(取决于关于选择器表达式的类型)。

另一方面需要注意的是,您应该阅读相关版本的JLS以获取确切信息......而不是依赖于某些StackOverflow问题。在这种情况下,JLS更简单,更直接地表达了限制。

参考:

(我找不到要链接到的Java 5 JLS的公共副本......)

答案 1 :(得分:-1)

Java语言规范始终是最佳检查位置:https://docs.oracle.com/javase/specs/jls/se6/html/statements.html#14.11

编辑:粘贴到JLS SE6的链接。不过,JLS 最好检查的地方。