使用参数as(int,int)调用方法时将获得首选项,带签名的方法(int,int)或(Integer,Integer)

-1 java core

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

我有两个带参数的方法:

method1(int a, int b);
method1(Integer a, Integer b);
Run Code Online (Sandbox Code Playgroud)

将调用哪种方法,为什么?

Hol*_*ger 5

这已在TheJP®语言规范,§15.12.2中指定.编译时步骤2:确定方法签名:

...

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

  1. 第一阶段(§15.12.2.2)执行重载解析而不允许装箱或拆箱转换,或使用变量arity方法调用.如果在此阶段没有找到适用的方法,则处理继续到第二阶段.
    ...
  2. 第二阶段(§15.12.2.3)执行重载解析,同时允许装箱和拆箱,但仍然排除使用变量arity方法调用.如果在此阶段没有找到适用的方法,则处理继续到第三阶段.
    ...
  3. 第三阶段(§15.12.2.4)允许重载与变量arity方法,装箱和拆箱相结合.

因此,由于method1(int a, int b)在第一阶段中发现,因此将使用它.method1(Integer a, Integer b)如果在第一阶段没有找到匹配方法,则只能在第二阶段找到.