gpt4 book ai didi

java - 尴尬的 Var-args 参数

转载 作者:行者123 更新时间:2023-12-01 16:32:53 25 4
gpt4 key购买 nike

假设这段代码:

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);
}

}

在这两种情况下,我们都希望得到一个包含 2 和 3 的一维数组。所以乍一看预期的输出应该是:

false
true

惊喜!实际输出是:

true
true

更新此帖子:

实际上,这不是一个好问题,因为我还没有意识到这种情况符合 Var-args 规则。

总而言之,即使 Var-args 是参数,int[] 数组也无法自动装箱为 Integer[];没有特殊待遇。

最佳答案

您无法将原始数组自动装箱为“包装器”数组:数组是完全不同的类型!自动装箱原语有一些非常明确的用例。数组不存在这些用例。

您的方法签名要求至少一个对象,而您提供了一个:int[]。您的方法签名还允许您提供一个数组,您可以使用 Integer[] 来实现。

还值得指出的是,所有可变参数方法都可以使用参数类型的数组来调用,这就是您对 Integer 所做的事情。由于 int 不是 Object,因此编译器会将 array 视为 Object

关于java - 尴尬的 Var-args 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com