为什么在期望数组时传递空字符串会将该数组的大小返回为1?

Sag*_*ena 3 java

我在多个方面非常困惑.有人能否对此有所了解.这是一个示例代码.

public static void main(String[] args) {
    String str = null;
    abc(str);
}
static void abc(String... str){
    System.out.println(str.length);
}
Run Code Online (Sandbox Code Playgroud)

输出:1

jbx*_*jbx 10

让我们分解吧.我重命名了参数名称以使其更清晰.

static void abc(String... arrayOfStrings){
    System.out.println(arrayOfStrings.length);
}
Run Code Online (Sandbox Code Playgroud)

String ...是说,不是传递一个数组,你可以一个接一个地传递项目作为参数,在它们下面它们将被合并为一个数组.你仍然可以传递一个显式的类型对象String[](在这种情况下它不会为你创建数组),但是传递只是null假设它的类型String不是String[].

你正在做abc(null)(因为你传递的参数是null).

所以arrayOfStrings会有一个项目,恰好是一个 null参考.

所以,arrayOfStrings.length回报1.

如果你这样做abc(null, null),你会得到2.

如果你这样做,abc((String[]) null)你会得到一个,NullPointerException因为你会试图得到length一个null对象引用.如果您希望传递空值,请确保在访问数组之前abc()检查null作为参数传递.

作为一般的最佳做法null,尽可能避免传递,最好传递一个空数组.传球null只是一个毒丸,等待一些方法忘记检查null和投掷NullPointerException.

  • @Lino True,添加了一个关于何时传递明确键入`String []`的对象的解释. (2认同)