Java中的Varargs

时间:2018-01-23 08:41:08

标签: java constructor linked-list variadic-functions

所以我创建了一个ListNode.java类,并且正在玩varargs。我定义了构造函数ListNode(int ... values),以便它根据您传入的内容创建一个链接列表及其下一个引用。例如,

ListNode head = new ListNode(1, 2, 3); // is equivalent to 1 -> 2 -> 3 -> null

我正在测试当我没有传递任何内容时会发生什么,即new ListNode()并且这样的调用会导致

ListNode emptyHead = new ListNode(); // is equivalent to 0 -> null

你能解释一下原因吗?下面是我对ListNode.java的实现。

public class ListNode {
    public int val;
    public ListNode next;

    public ListNode(int val) {
        this.val = val;
        this.next = null;
    }

    public ListNode(int... values) {
        if (values.length == 0) return;

        this.val = values[0];
        this.next = null;
        ListNode ptr = this;
        for (int i = 1; i < values.length; i++) {
            ptr.next = new ListNode(values[i]);
            ptr = ptr.next;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

好吧,如果你没有向构造函数传递任何内容,它会收到一个空数组。

您的if (values.length == 0) return;语句导致构造函数执行结束。

因此,this.val默认仍为0this.next仍为null