• 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,也没问题。谁知道他们是怎么想的^_^,作为语言的使用者,遵守规则即可。

  • 相关阅读:
    用initconnect+binlog实现用户操作追踪【转】
    INSERT INTO … SELECT 的锁【转】
    Memcached 高可用方案 Repcached
    关于MySQL建表对DML的影响【转】
    NoSQL之【memcached】学习
    关于MySQL insert into ... select 的锁情况
    MySQL数据库诊断——InnoDB关机问题 【转】
    Your document is being created
    Failure to Get Sequential Numbering Profile Option
    Runtime error '1004'
  • 原文地址:https://www.cnblogs.com/mzmy/p/11200740.html
Copyright © 2020-2023  润新知