gpt4 book ai didi

java - 为什么原始类型的数组不被视为对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:26 25 4
gpt4 key购买 nike

我知道 java 中的数组扩展对象,那么为什么将它们作为参数传递不起作用。

public static void main(String[] args) {
foo(new Integer[]{1, 2, 3}); // 1
foo(new int[]{1,2,3}); //2
}

static void foo(Object... params) {
System.out.println(params[0]);
}

此外,为什么它不将数组视为单个参数(第 1 行)

运行上面的输出是:

1
[I@3e25a5

最佳答案

在 Java 中,每个带有 (X...) 签名的函数都将 X 数组作为参数。

在您的第一个示例中,您收到警告,您正在将整数数组作为 vararg Object 传递而不进行强制转换。 Java 非常聪明,您可能希望将其作为 Object[] 而不是单个 Object 传递。如果您向 Object[] 添加强制转换,警告就会消失。

在第二个示例中,数组仅作为第一个可变参数传递,因为每个数组都是一个对象。它不能作为对象数组传递,因为它是基元数组。

任何类型的数组都是对象,因为您可以验证运行这段代码

public class Test{
public static void test(Object a) {
System.out.println("ok");
}

public static void main(String args[]){
int[] i = {1,2,3,4};
test(i);
}
}

它打印“ok”,这意味着 int[] 是一个对象。~

关于java - 为什么原始类型的数组不被视为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364571/

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