请问 这段代码中为什么 不能用 double float long 类型  包错:可能损失精度 怎么理解这段话 
public static void main (String[] args) { 
    
    //int i=-1; 
  // short i=1; 
  // long i=-1; 
  // float i=1; 
  // double i=-1; 
    int j; 
    switch(i){ 
    case -1.3: 
    j=0; 
    break; 
    
    case  -2: 
    j=1; 
    break; 
    
    default:j=3; 
    
    
    }

解决方案 »

  1.   

    如果我没记错的话,好像switch中只能用几种类型的。
    也就是说类型是有限制的,至于具体是怎样我也忘了。
      

  2.   

    switch后面的表达式和case后面的的常量都必须是整型或是字符型,前两天上课老师刚讲的!
      

  3.   

    double i=1 和 int i=1 都是整形常量 为何不能是前者啊 
      

  4.   

    你应该赋值为double i=1.0 试试。
      

  5.   

    switch只能用四种类型,char,byte,short,int
    java就是这么规定的。
      

  6.   

    呃,刚讲到两种类型
    一种char 一种int
      

  7.   

    因为上面的集中类型double float long ,不同的情况可能给出不同的值,不同机器(像32位和64位)之间可能给出的值不一样比如1/3这样的结果,所以那个和他相同的值就不能确定下来也就不能匹配了、
      

  8.   

                    char
                     ||         
                     ||
                     \/
    byte==》short==》int==》 long
                      |       |          
                      |       | 
                     \ /     \ /
                    float==》double
       补充:(int==》double 和 long --> float)
        说明:==》表示不损失精度-->表示损失精度
    由此图可以看出只有在有char,int,short,byte可以保证不损失精度,所以switch只支持这四种!
      

  9.   

    图有点偏了,char转化是int,int转化为float,long对double