为什么将 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
。
如果您希望可变参数方法接收空数组,
明确传递:
method(new Object(), new Object[0])
不要传递任何东西:
method(new Object())
选项 2 会更地道。
null
是一个值。
您为 varargs 参数提供了一个值,因此数组将为 new Object[] { null }
,长度为 1。
如果您不想传递任何值,则必须调用 method(new Object());
。
我一直在我的方法中使用 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
。
如果您希望可变参数方法接收空数组,
明确传递:
method(new Object(), new Object[0])
不要传递任何东西:
method(new Object())
选项 2 会更地道。
null
是一个值。
您为 varargs 参数提供了一个值,因此数组将为 new Object[] { null }
,长度为 1。
如果您不想传递任何值,则必须调用 method(new Object());
。