首页 > 解决方案 > 在调用参数为 (int, int) 的方法、带有签名 (int, int) 或 (Integer, Integer) 的方法时,将给出首选项

问题描述

我有将参数传递为(4,5)的方法调用。

我有两种带参数的方法:

method1(int a, int b);
method1(Integer a, Integer b);

哪个方法会被调用,为什么?

标签: javacore

解决方案


这已在Java® 语言规范第 15.12.2 节中指定。编译时步骤 2:确定方法签名

…</p>

该过程的其余部分分为三个阶段,以确保与 Java SE 5.0 之前的 Java 编程语言版本兼容。阶段是:

  1. 第一阶段(第15.12.2.2 节)执行重载决议,不允许装箱或拆箱转换,或使用变量 arity 方法调用。如果在此阶段没有找到适用的方法,则处理继续到第二阶段。
    …</li>
  2. 第二阶段(第15.12.2.3 节)执行重载决议,同时允许装箱和拆箱,但仍然排除使用变量 arity 方法调用。如果在此阶段没有找到适用的方法,则处理继续到第三阶段。
    …</li>
  3. 第三阶段(第 15.12.2.4 节)允许将重载与可变参数方法、装箱和拆箱相结合。

因此,既然method1(int a, int b)是在第一阶段发现的,就会被使用。method1(Integer a, Integer b)如果在第一阶段没有找到匹配方法,则只会在第二阶段找到。


推荐阅读