switch为什么只能用int,short,byte,char,而不能用long,String

解决方案 »

  1.   

    因为规定了啊,switch 只能使用 int 类型或者是可以转换为 int类型的参数(char,char 和 int 通过ascii转换)
      

  2.   

    LZ,,这是语法的规定,,没什么好问的吧,,
    JAVA5以后,,还可以用枚举来进行SWITCH
      

  3.   

    switch(1) 第一种是int型
    switch('a') 第一种是char型
      

  4.   

    实际上就是默认整型int
    char、byte、short都可自动转为int型
      

  5.   

    不行
    switch 只能使用char,int还有 枚举 这三种类型
      

  6.   

    这个应该就是龟腚,没啥其它原因,C#中就可以使用String做case。
    如果非要原因,顶多,这可以算一个:如果允许long和String,编译器和JVM实现起来会复杂一点点,尤其是:可能无法把switch/case语句编译成时间和空间都非常高效的指令跳转表。
      

  7.   

    我想楼上说的对
    基于执行效率来看吧,所以没做String之类的Switch 
    如果一定要用string ,用if else 也可以做
      

  8.   

    因为这是java ,如果是c#就可以用string
      

  9.   

    switch之后括号内的表达式只能是整型(byte、short、char和int)、枚举型或字符型表达式,
    不能是长整型long 或其他任何类型。关于枚举型将在后面详细介绍。http://book.51cto.com/art/200709/55571.htm
      

  10.   

    好~
    ------------------------------------------------
    另外我上会面试时 选项里 还一个Integer 还好我当时不会 也没蒙Integer~
      

  11.   

       switch后只能用byte,short,int,char,jdk5.0以后,还可以用枚举类型,这是java的规范,呵呵
       
      

  12.   

    原因很简单。因为long类型在Java中是64位的,因此很难映射到一个具体机器的寄存器中,而这对于Java后台语义着色而言是比较麻烦的。而String不能作为一个基本类型的常量来对待,它是一个对象。哪怕你直接写"Hello, world",Java虚拟机在执行时也会为它创建对象。因此不能作为常量。
      

  13.   

    啊 不对呀 改成了Integer Short Byte Character(没有Char类) 照样运行呀 public static void switchDemo(){
    Integer month = 8;

    switch(month) {
         case 1:  System.out.println("January"); break;
         case 2:  System.out.println("February"); break;
         case 3:  System.out.println("March"); break;
         case 4:  System.out.println("April"); break;
         case 5:  System.out.println("May"); break;
         case 6:  System.out.println("June"); break;
         case 7:  System.out.println("July"); break;
         case 8:  System.out.println("August"); break;
         case 9:  System.out.println("September"); break;
         case 10: System.out.println("October"); break;
         case 11: System.out.println("November"); break;
         case 12: System.out.println("December"); break;
         default: System.out.println("Invalid month.");break;
    }
    }面试题我蒙错了~
      

  14.   

    switch 只能使用 int 类型, short、byte在计算时候默认就是int型的吧。至于char我想应该是转换的。这个我也想知道为什么char可以。
    short s = 100;char c = 100;byte b = 100;都不会报错的。会不会给这个有关。
      

  15.   

    顶,面试确实对基础知识考察很严格,fighting
      

  16.   

    byte ,char,short类型可以自动转化为int类型,即从下到上自动转化,而long,String型变量所占得空间比int大,不能自动转化为int类型。switch中只能是int型或者枚举类型
      

  17.   

    这个估计是自动封装、解封的原因,
    JDK1.5以后可以自动将基本类型封装成包装类型,自动将包装类型解封成基本类型。或者说,在JDK1.5以后,基本类型和包装类型是一样的了。
      

  18.   

    妈的,手贱,挖坟了。本来只是来查找为啥switch不能用long的。