先发代码
public class Yikes{
 public static void go(Long n){System.out.print("Long ");}
 public static void go(Short n){System.out.print("Short ");}
 public static void go(int n){System.out.print("int ");}
 public static void main(String args[]){
  short y=6;
  long z=7;
  go(y);
  go(z);
 }
}
结果是int Long
为什么结果不是Short Long
y难道不是Short类型数据???

解决方案 »

  1.   

    因为你在上面的方法中申明的参数是Short类,而不是short基本类型。
      

  2.   

    自己的一点理解:
    原因是当short类型变量被使用时他会默认转换成int类型。
    正如:
    short x = 1;
    short y = 1;
    short z = x + y;//提示错误:cannot convert from int to short当然也不是所有情况下使用short类型变量都被转化为int类型,比如说赋值:
    short x = 1;
    short y = x;//ok
      

  3.   

    转换顺序是这样的short-int-Short。short y=6;所以在参数int和Short都存在的同时,系统会选择参数为int的方法
      

  4.   


    public class test2
    {
    public static void go(Long n)
    {
    System.out.println("Long");
    }
    public static void go(Short n)
    {
    System.out.println("Short");
    }
    public static void go(int n)
    {
    System.out.println("int");
    }
    public static void main(String args[])
    {
      Short y=6;
      Long z= 7L;
      go(y);
      go(z);
    }
    }你用这个代码再试一下,就可以得到你想到的结果了。
    原因,1楼的朋友也说了。主要是你把short类型和Short类给搞混了。short是基本数据类型,Short是一个Java 类
      

  5.   

    这个问题引申出了另外一个问题,
    int a=10;
    byte b=a;//会发生编译的错误
    byte c=10;//编译能通过
    还有就是short int long之间的转换会出现
    short s=5;int理论上要强制转换才能变为short
    想问问高手
      

  6.   

    看下这个
    public class Yikes
    {
    public static void go(Long n)
    {
    System.out.println("LongLLLLLLLLLLLLLLLLLLLL ");
    } public static void go(Short n)
    {
    System.out.println("ShortSSSSSSSSSSSSSSSSSSSSSSS");
    } public static void go(int n)
    {
    System.out.println("int ");
    } public static void main(String args[])
    {
    Short y = 6;
    short k = 8;
    long z = 7;
    go(y);
    go(z);
    go(k);
    }
    }
    结果:
    ShortSSSSSSSSSSSSSSSSSSSSSSS
    LongLLLLLLLLLLLLLLLLLLLL 
    int 楼主,明白了 吧
      

  7.   

    你定义的时候把它直接定义成了一个Short类,而不是short变量~
    楼上的程序很能说明问题啊,顶一个·
      

  8.   

    二楼正解
    public class Yikes{ 
        public static void go(long n){System.out.println("Long ");} 
        public static void go(short n){System.out.println("Short ");} 
        public static void go(int n){System.out.println("int ");} 
        public static void main(String args[]){ 
    int x=5;
            short y=6; 
            long z=7;
    go(x);
            go(y); 
            go(z); 
    go(y+y);//注意此行输出结果
    go(x+z);
    go(y+z);
        } 

    在这里请注意参数类型和main()方法里局部变量的类型,再有 当short类型变量参加运算的时候,哪怕是两个short型变量参加运算,short型也是先自动成长int型在进行运算,结果为int型
      

  9.   

    http://blog.csdn.net/ZangXT/archive/2008/12/13/3511943.aspx
    这是java的方法调用转换的问题,可以看看我的一点分析。
      

  10.   

    http://blog.csdn.net/ZangXT/archive/2008/12/13/3511943.aspx
    这是java的方法调用转换的问题,可以看看我的一点分析。
      

  11.   

    lz用jdk5.0试下看是不是输入你想要的结果
      

  12.   

    八大基本数据类型boolean,char,short,byte,int,long,float,double 
    八大基本数据类型的包装类Boolean,Character,Short,Byte,Integer,Long,Float,Double 
    short,byte,char在进行运算时会自己转化成int型 
    例如: 
    byte a=0,b=4; 
    byte c=a+b;----编译出错 
    byte c=(byte)(a+b);----- a,b自动转化成int型再运算 以下是基本数据的参数查找优先级 
    boolean参数查找优先级:boolean,Boolean 
    short参数查找优先级:short,int,Short 
    byte参数查找优先级:byte,short,int,long,Byte,float,double 
    char参数查找优先级:char,int,long,float,double,Character 
    int参数查找优先级:int,long,float,double,Integer 
    long参数查找优先级:long,float,double,Long 
    float参数查找优先级:float,double,Float 
    double参数查找优先级:double,Double 已经过ISO9001验证 
    总结: 
    这些东西不值得深究,转化不了编译器会报错 
    只要知道short,byte,char进行运算时会自动转化成int就行了 
    郑重建议:尽量少用基本数据类型的包装类,它会生成两个对象占用更多内存
    下面这个贴子和你的问题一模一样:
    http://topic.csdn.net/u/20081125/16/7bddfc2b-4031-48e2-ab84-1419d58be83f.html
      

  13.   

    嗯,Short和short的问题,学到了
      

  14.   

    为什么short=5;可以,当定义方法参数为short类型时,又不可以?例如:定义方法public void a(short b){} 使用时:*.a(5);这时候会报错?