对于这个问题,我看到了像这样的答案在编译期间,switch语句的每个case的值必须计算为可以提升为int值的值但是我没有理解为什么因为我们也使用byte,short,int,char但是这句话只说了int所以请解释我并给我一个例子
答案 0 :(得分:2)
在Java 5中引入了枚举类型,同时增强了switch
语句以允许切换enum
值。
这使得引用的陈述无效:
“[d] uring compilation,switch语句的每个case的值必须计算为一个可以提升为int值的值”
...除非它引用Java 1.4.x或更早版本。
它的含义是案例值必须为byte
,short
,char
或int
。 (这些是唯一可以使用其值的类型
在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 是最好检查的地方。