我用了这段代码。我很困惑为什么此int数组未转换为对象vararg参数:
class MyClass {
static void print(Object... obj) {
System.out.println("Object…: " + obj[0]);
}
public static void main(String[] args) {
int[] array = new int[] {9, 1, 1};
print(array);
System.out.println(array instanceof Object);
}
}
Run Code Online (Sandbox Code Playgroud)
我期望输出:
Object…: 9
true
Run Code Online (Sandbox Code Playgroud)
但它给出:
Object…: [I@140e19d
true
Run Code Online (Sandbox Code Playgroud)
Kis*_*kae 21
您遇到了一个极端的情况,即对象和基元无法按预期工作。问题在于实际的代码最终会达到预期的效果static void print(Object[]),但int[]无法转换为Object[]。但是,可以将其强制转换为Object,从而导致执行以下代码:print(new int[][]{array})。
你得到你所期望通过使用基于对象的数组一样的行为Integer[],而不是int[]。
这样做的原因是int无法将Object数组隐式转换为数组。因此,您实际上最终将int数组作为数组的第一个元素传递Object。
如果您这样做,则可以在不更改main方法和参数的情况下获得预期的输出:
static void print(Object... obj) {
System.out.println("Object…: " + ((int[]) obj[0])[0]);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)Object…: 9 true