为什么将 null 传递给 varargs 会给出长度 1?

Why does passing null to varargs give length 1?

我一直在我的方法中使用 Java 的变量参数,并通过传入 null 作为参数来测试它们:

public void method(Object A, Object...b) {
    if(A == null || b == null || b.length == 0) return;
...(something that invokes b)...

public void test() {
    method(new Object(), null)
...

在方法的开头,我检查了null作为参数,甚至检查了长度为0。但是由于NullPointerException导致测试一直失败,我运行调试器,b 的长度为 1!它甚至说当我点击 b

的显示三角形时
all elements are null

我最终通过检查长度 1 和元素 0 是否为空解决了这个问题,但是 有没有人解释为什么 Java 这样做?谢谢!

因为您传递的值是 null

如果您希望可变参数方法接收空数组,

  1. 明确传递:

    method(new Object(), new Object[0])
    
  2. 不要传递任何东西:

    method(new Object())
    

选项 2 会更地道。

null 是一个值。

您为 varargs 参数提供了一个值,因此数组将为 new Object[] { null },长度为 1。

如果您不想传递任何值,则必须调用 method(new Object());