Mik*_*378 0 java variadic-functions
假设这段代码:
public class Test{
public static void main(String[] args) {
Test.testInt(new int[]{2,3});
Test.testInteger(new Integer[]{2,3});
}
public static void testInt(Object... elements){
System.out.println(elements[0] instanceof int[]);
}
public static void testInteger(Object... elements){
System.out.println(elements[0] instanceof Integer);
}
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,一个人都希望有一个包含2和3的一维数组.所以预期的输出应该是第一眼:
false
true
Run Code Online (Sandbox Code Playgroud)
惊喜!实际输出是:
true
true
Run Code Online (Sandbox Code Playgroud)
本次更新的最新消息:
实际上,这不是一个好问题,因为我没有意识到这种情况符合Var-args规则.
总而言之,即使Var-args是参数,int []数组也不能自动装箱到Integer []; 没有特殊的待遇.
您不能将原始数组自动装箱到"包装"数组:数组是完全不同的类型!autoboxing原语有一些非常明确的用例.数组不存在这些用例.
你的方法签名要求至少一个Object
,你提供了一个:int[]
.您的方法签名还允许您提供一个数组,您可以使用它Integer[]
.
值得指出的是,所有varargs方法都可以使用参数类型的数组来调用,这正是您正在使用的Integer
.由于int
不是Object
,您的编译器将数组视为Object
.