switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?为什么?

  可以是int 基本类型或Integer 包装类型,由于,byte,short,char 都可以隐含转换为int,所以这些类型以及这些类型的包装类型也是可以的。显然long 和String 类型都不符合switch 的语法规定,并且不能被隐式转换成int 类型,所以它们不能作用于swtich 语句中。switch中可以是字符串类型,String(JDK1.7之后才可以作用在string上),switch中可以是枚举类型(JDK1.5之后)。

  问题一 : 为什么switch不可作用于long double float ,包括他们的包装类?

    简单的回答是因为语法的规定。在实际编程中,极少有如此多的分支,以致需要使用Long类型。这样的语法规定是语言设计者的折衷考虑,并不一定特别合理,语言规范也在不停演变。但截止目前的版本,Java的Swithch分支仍然不支持Long,在这种情况下,可以采取一些办法:

  1) 转为int类型,范例如下:

      final long value = System.currentTimeMillis() % 5;
      switch ( (new Long(value)).intValue() ) //注意这行
      {
         case 1 : System.err.println("One");
                  break;
         case 2 : System.err.println("Two");
                  break;
   }

  2) 放弃switch,改用 if/else 的写法。
  3) 放弃switch,改用 Map。

  补充:语言的底层实现细节有时还真不完全清楚,Java新版本中Switch添加了对String的支持,如果要支持Long,也没问题。谁知道他们是怎么想的^_^,作为语言的使用者,遵守规则即可。

posted @ 2019-07-17 14:17  飞之萌芽  阅读(3908)  评论(0编辑  收藏  举报