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

时间:2015-05-18 16:52:01

标签: java variadic-functions

我在我的方法中一直使用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而一直失败,我运行了调试器,{{ 1}}长度为1!当我点击b

的披露三角形时,它甚至说道
b

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

2 个答案:

答案 0 :(得分:17)

因为您传递的值为null

如果您希望varargs方法接收空数组

  1. 明确传递:

    method(new Object(), new Object[0])
    
  2. 根本没有通过任何事情:

    method(new Object())
    
  3. 选项2更具惯用性。

答案 1 :(得分:2)

null是一个值。

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

如果您想完全不传递任何值,则必须致电method(new Object());