有一个java题目:
某重载函数有如下几种类型:
void med(float a, long b){}
void med(long a, long b){}
void med(long a, float b){}
请问 med(12,(long)13)这句程序会不会报错?我的理解是:12是int,在上面的重载函数中没有(int,long)这个参数列表,看起来似乎不符合要求,但是int应该可以隐式转换为long啊,所以med(12,(long)13)应该等同于med((long)12,(long)13),所以不会报错!大家的意见呢?

解决方案 »

  1.   

    不会报错.12会转成LONG值传递.
      

  2.   

    《java解惑》中有说这个问题,关于重载,参数可以互相转换的,会找最精确的那个方法
      

  3.   

    谢谢大家,谢谢大家,拿回4分了~~~ oh ye~~~~~~~~~
      

  4.   

    数字隐式转型规律: 
    int<long<float<double ,向上转型,java会默认成功,但是向下转型,要进行强制转换,而且还会有精度的丢失。
    med(12,(long)13) 会自动向上转型为long,调用最匹配的方法
    void med(long a, long b){}
    public class CastNumber {
    void med(float a ,long b){
    System.out.println("f->a+b="+(a+b));
    }
    void med(long a, long b){
    System.out.println("l->a+b="+(a+b));
    }
    void med(long a, float b){
    System.out.println("a+b"+a+b);
    } public static void main(String[] args) {
     CastNumber cn = new CastNumber();
     cn.med(12, (long)13);
    }
    }打印结果:l->a+b=25