有一个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),所以不会报错!大家的意见呢?
某重载函数有如下几种类型:
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),所以不会报错!大家的意见呢?
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