【问题标题】:Why final Byte as a case in switch statement doesn't compile?为什么 final Byte 作为 switch 语句中的 case 不能编译?
【发布时间】:2015-06-11 13:38:02
【问题描述】:
byte a = 125;
final byte b = 2;
final Byte c = 3;
switch (a) {
case b: // works fine
    break;
case c: // Constant Expression required
    break;
}

既然c 是一个final 变量,那么它不是一个编译时间常数,因此不是一个有效的大小写标签吗?

【问题讨论】:

  • 如何使用常量语句执行 switch 语句?

标签: java switch-statement constants


【解决方案1】:

既然 c 是 final 变量,那它不是编译时常量吗

没有。常量表达式的规则在JLS 15.28 中给出,它们不包括包装类型:

常量表达式是表示原始类型值或字符串的表达式,它不会突然完成并且仅使用以下 [...]

包装类型既不是原始类型也不是String

【讨论】:

  • 这是我的问题。为什么字节表达式被认为是常量,但字节表达式不是,即使两者都被声明为 final?
  • @paidedly:您是否阅读过描述常量表达式的 JLS 15.28?
  • @paidedly 这不是他们对常量表达式的意思,这种情况如何运作?如果该sniper 是有效代码,将应用哪种相等性?
  • 好的,知道了。所以包装类型变量永远不能是常量表达式。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2011-06-25
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多