在Java中通过引用传递的参数

时间:2017-01-19 23:15:34

标签: java parameters reference

当我想从NodeList中删除特定节点时遇到了问题,

void removeNode(Node head, int value){
    if (head == null) {
        System.out.println("error : Null linkedList");
    } else {
        Node cur = null;
        if (head.item == value) {
            //The problem is here.
            head = head.next;
        } else {
            cur = head;
            while( cur.next != null && cur.next.item != value) {
                cur = cur.next;
            }

            if(cur.next != null && cur.next.item == value){
                cur.next = cur.next.next;
            }
        }
    }
}

如您所知,定义了节点的形式:

public class Node{
      int item;
      Node next;
  }

我的测试是这样的:

 void test(){
    Node node1 = new Node();
    Node node2 = new Node();
    Node node3 = new Node();
    Node node4 = new Node();

    node1.item = 1;
    node2.item = 2;
    node3.item = 3;
    node4.item = 4;

    node1.next = node2;
    node2.next = node3;
    node3.next = node4;
    node4.next = null;
 }

我做的时候进展顺利

    removeNode(node1,2);
    removeNode(node1,3);
    removeNode(node1.4);

但我无法删除第一个节点

    removeNode(node1,1);

它不起作用,所以我在这句话中设置了一个调试点。在调试模式中,我清楚地看到执行该句后,“node1”变为“node2”,其“item”等于“2”。但退出整个“removeNode”后,node1返回原来的“node1”,其“item”等于“1”。

我认为我在方法中使用的“头”是node1的副本,但我了解到Java总是使用引用传递参数。我很困惑这个方法里面的“头”是什么。

0 个答案:

没有答案