switch 语句的每个 case 的取值有什么限制
What restrictions are placed on the values of each case of switch statement
对于这个问题,我看到了这样的答案在编译过程中,switch 语句的每个 case 的值必须评估为可以提升为 int 值的值,但我不明白为什么,因为我们也在使用 byte, short, int, char 但是这个声明只说了 int 所以请解释一下并给我一个例子
Java 语言规范始终是检查的最佳位置:https://docs.oracle.com/javase/specs/jls/se6/html/statements.html#14.11
编辑:将 link 粘贴到 JLS SE6。不过,JLS 是 最好的检查地点。
在Java5中引入了枚举类型,同时增强了switch
语句以允许在enum
值上切换。
使引用的语句无效:
"[d]uring compilation, the values of each case of a switch statement must evaluate to a value that can be promoted to an int value"
...除非它指的是 Java 1.4.x 或更早的版本。
意思是大小写值必须是 byte
、short
、char
或 int
。 (只有这些类型的值可以是
提升为 int
... 在 Java 之前 5. Java 5 中也引入了包装类型的拆箱。)
当然,这在Java 5 中不再成立。在Java 5 和更高版本中,常量可以是enum
值,而在Java 7 中之后它们也可以是 String
值(取决于选择器表达式的类型)。
另一个需要注意的是,您应该阅读 JLS 的相关版本以获得权威信息……而不是依赖于某些 Whosebug 问题。在这种情况下,JLS表达的限制更简单直接。
参考:
(我找不到 Java 5 JLS 到 link 到 ... 的 public 副本)
对于这个问题,我看到了这样的答案在编译过程中,switch 语句的每个 case 的值必须评估为可以提升为 int 值的值,但我不明白为什么,因为我们也在使用 byte, short, int, char 但是这个声明只说了 int 所以请解释一下并给我一个例子
Java 语言规范始终是检查的最佳位置:https://docs.oracle.com/javase/specs/jls/se6/html/statements.html#14.11
编辑:将 link 粘贴到 JLS SE6。不过,JLS 是 最好的检查地点。
在Java5中引入了枚举类型,同时增强了switch
语句以允许在enum
值上切换。
使引用的语句无效:
"[d]uring compilation, the values of each case of a switch statement must evaluate to a value that can be promoted to an int value"
...除非它指的是 Java 1.4.x 或更早的版本。
意思是大小写值必须是 byte
、short
、char
或 int
。 (只有这些类型的值可以是
提升为 int
... 在 Java 之前 5. Java 5 中也引入了包装类型的拆箱。)
当然,这在Java 5 中不再成立。在Java 5 和更高版本中,常量可以是enum
值,而在Java 7 中之后它们也可以是 String
值(取决于选择器表达式的类型)。
另一个需要注意的是,您应该阅读 JLS 的相关版本以获得权威信息……而不是依赖于某些 Whosebug 问题。在这种情况下,JLS表达的限制更简单直接。
参考:
(我找不到 Java 5 JLS 到 link 到 ... 的 public 副本)