我对 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
的参数是 null
的 Integer
数组,不是 new Integer[]{null}
.
第一次调用传递了一个空数组,因此长度为 0。类似地,第三次调用传递了一个长度为 44 的数组,结果就是这个。
关于java - 可变参数中的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111616/