现实中没见过这么写代码的,这不是加快自己头秃么。。。
我理解了一下,感觉是这样的(你可以去请教一下老师,我读书的时候没碰到这个问题)。
从小到大执行隐式类型转换: int -> float -> double
可匹配的第一个方法:隐式转换最少次数,匹配到的方法
static void test (double d, float f) {} // 第一个
stsatic void test (float f, double d) {} // 第二个
public static void main(String[] args) {
test((double)1, (float)2); // 这个匹配第一个
test((float)1, (double)2); // 这个匹配第二个
// 隐式转换成第一个,需要把int->float, 隐式转换1次从int->float,
// 无法隐式转换成第二个,double不能隐式转换成float这个知道吧?
// 所以找到了“可匹配的第一个方法”,即第一个
test((double)1, (int)2);
// 无法隐式转换成第一个
// 隐式转换成第二个,把int->float,隐式转换了1次
// 所以找到了“可匹配的第一个方法”,即第二个
test((int)1, (double)2);
// 不行的-----------------------------
// 隐式转换成第一个,需要把float->double,int->float,隐式转换2次
// 隐式转换成第一个,需要把int->double,隐式转换2次(int->float, float->double)
// 因为两个都是隐式转换2次,没办法找到“可匹配的第一个方法”,所以编译错了
// test((float)1, (int)2);
// 同理
test((int)1, (float)2);
test((int)1, (int)2);
test((float)1, (float)2);
// 这个没有匹配的方法,需要把其中一个double强转为float
test((double)1, (double)2);
}