为了确定应调用哪种方法,编译器会遍历以下列表,如JLS#5.3和JLS#15.12.2中所述:
在您的情况下,第一点适用并被method1(int, int)
调用。
(更精确地说,你的方法使用varags并具有较低的优先级比简单的装箱转换。换句话说,如果有一个method1(Integer a, Integer b)
会来之前method1(Integer... a)
的层次)
为什么会这样呢?15.12.2中的注释提示:
这样可以保证,由于引入了可变arity方法,隐式装箱和/或拆箱,在Java SE 5.0之前在Java编程语言中有效的任何调用都不会被认为是模棱两可的。