我有方法调用传递参数为(4,5).
我有两个带参数的方法:
method1(int a, int b);
method1(Integer a, Integer b);
Run Code Online (Sandbox Code Playgroud)
将调用哪种方法,为什么?
这已在TheJP®语言规范,§15.12.2中指定.编译时步骤2:确定方法签名:
...
该过程的其余部分分为三个阶段,以确保与Java SE 5.0之前的Java编程语言版本兼容.阶段是:
- 第一阶段(§15.12.2.2)执行重载解析而不允许装箱或拆箱转换,或使用变量arity方法调用.如果在此阶段没有找到适用的方法,则处理继续到第二阶段.
...- 第二阶段(§15.12.2.3)执行重载解析,同时允许装箱和拆箱,但仍然排除使用变量arity方法调用.如果在此阶段没有找到适用的方法,则处理继续到第三阶段.
...- 第三阶段(§15.12.2.4)允许重载与变量arity方法,装箱和拆箱相结合.
因此,由于method1(int a, int b)在第一阶段中发现,因此将使用它.method1(Integer a, Integer b)如果在第一阶段没有找到匹配方法,则只能在第二阶段找到.