在C/C++中,long型是完全允许的。float、double型不允许,很好理解,因为没有办法精确比较。
但long型为什么就不行呢?
    谢谢。

解决方案 »

  1.   

    只能是  enum  byte   short   int  char 
      

  2.   

    非也,之前String也不能作为switch的条件,jdk1.7中不照样加了这个功能!
      

  3.   

    Java 7加这个功能是脑子发热  背后没有原因吗
      

  4.   

    switch 语句被设计成跳转表,表面上看支持很多类型,但实际上只有一种,那就是 int 型,小于 int 的类型都会自动提升成 int。编译时,switch (abc) 语句被当成 goto addrs[abc],而这一句被实现成机器指令时就成为 表首地址 + 偏移量,所以一个 abc 其实代表了一个偏移地址,在 32 位机器上自然是 32 位。(当然 switch 语句也可以不实现为跳转表)如果想用 64 位的 long,可以强制转换(截断)成 int,或者使用 if-else。
      

  5.   

    感觉是因为long的范围太大了,跳着太累,^_^
      

  6.   


    嗯   switch应该很喜欢enum   一般都不会太多   呵呵
      

  7.   

    有一定道理  谢谢你的回答
    不过 有一个小疑问  1. 在C/C++中  long型是可以的 而且long是可以实现为不止4 bytes的 这作何解释
                       2. 假设将switch实现为跳转 在跳转之前必须进行比较  以确定跳到哪里去  所以 我
                          感觉是不是在比较这一步出的问题
      

  8.   

    按照 x86 的 ABI,long 被实现为处理器字长的大小,而跳转表的跳转无非就是 jmp *JMPTBL(, %eax, 4) 这样的指令,偏移必须能装到寄存器里才好…… 如果不能,就很难用跳转表实现了,虽然 switch 并不一定非要用跳转表实现…… Java 必须在32位机器和64位机器上移植,需要考虑兼容性
      

  9.   

    switch 是面向过程语言中的语法,在面向对象中应尽可能少的使用