java - 可变参数中的元素数量

标签 java arrays variadic-functions arity

我对 Java 如何计算可变参数的长度感到很困惑:

static void hello(Integer... x){

    System.out.println(x.length);
}


public static void hi(){
    hello();
}

这会打印一个 0。

当我通过时:

static void hello(Integer... x){

    System.out.println(x.length);
}


public static void hi(){
    hello(null);
}

这会抛出空指针异常。

static void hello(Integer... x){

    System.out.println(x.length);
}


public static void hi(){
    Integer[] xIntegers= new Integer[44];
    hello(xIntegers);
}

这会打印出 44。

谁能帮我理解一下?

最佳答案

这样写:

static void hello(Integer... x){

基本上是一种奇特的写法:

static void hello(Integer[] x){

额外的好处是您可以通过这种方式调用前者:

hello(Integer.valueOf(1), Integer.valueOf(2));

代替

hello(new Integer[]{Integer.valueOf(1), Integer.valueOf(2)});

话虽如此,您仍然可以使用带有可变参数的方法的第二种形式。

手头的第二个问题是数组,即使是基元数组,在 Java 中也被视为对象。所以如果你写:

hello(null);

你调用 hello 的参数是 nullInteger 数组,不是 new Integer[]{null}.

第一次调用传递了一个空数组,因此长度为 0。类似地,第三次调用传递了一个长度为 44 的数组,结果就是这个。

关于java - 可变参数中的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111616/

相关文章:

c - C99 中的 Variadic 函数可以释放多个数组?

java - 在java中返回 boolean 值?

java - 如何在另一个文件字符串中搜索并统计字符串 "CTG"?

java - 为什么不能在 while 循环中将 array[n] 与 null 进行比较?

javascript - (Math.random()*x)+y 返回大于 x+y 的数字

java - 在 Java 中,可以在不使用 varargs 工具的情况下使用变量参数吗?

java - 如何在 NetBeans 之外构建 NetBeans 项目?

java - 从 Java 调用 AS400 RPG 时出错

objective-c - 在 xcode 中显示数组

scala - Scala中的函数对象的varargs错误?