java重载寻找最精确方法的疑问

我在看java教课书时关于重载寻找最精确方法时,有段话,在网上查询了很久好像没有相关的解释图片说明图片说明
然后后面有个例子
图片说明

在这个例子里面
test((float)1,(int)2);和test((int)1,(float2));为什么会编译错误,int不是会隐式转换为double吗
另外test((int)1,(int)2);和test((float)1,(float)2);和test((double)1,(double)2);再寻找最精准方法时,根据参数的隐式转型时对两个重载的test方法对应,所以系统不知道要对应哪个才报错,我这样理解对不对?

1个回答

现实中没见过这么写代码的,这不是加快自己头秃么。。。

我理解了一下,感觉是这样的(你可以去请教一下老师,我读书的时候没碰到这个问题)。
从小到大执行隐式类型转换: 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);
}
weixin_41866607
廖___ 好的,非常感谢,大致懂了。我再看看有没有别的看法。
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问