2017-07-08 31 views
0

我初始化LinkedNode“node”成为关键字“this”,然后将新节点“last”追加到创建的节点“node”的末尾。但是请注意,在while循环中,我将“节点”更改为“node.next”。为什么当我运行该程序时打印出正确的结果?也许我不太明白“这个”。我如何在方法append(int n)中更改“this”?

public class LinkedNode { 

    protected LinkedNode next; 
    protected int data; 

    LinkedNode(int d) { 
     data = d; 
    } 

    public void append(int n) { 
     LinkedNode node = this; 
     LinkedNode last = new LinkedNode(n); 
     while (node.next != null) { 
      node = node.next; 
     } 
     node.next = last; 
    } 

    public static void main(String[] args) { 
     LinkedNode Node = new LinkedNode(2); 
     Node.append(3); 
     Node.append(4); 
     Node.append(5); 
     for (int i = 0; i < 4; i++) { 
      System.out.println("Data: "+Node.data); 
      Node = Node.next; 
     } 
    } 
    //Output is correctly "2 3 4 5" 
} 

回答

1

我不知道你是否理解“this”,但我怀疑是你不懂java。

append()函数中,node是指向LinkedNode类型的对象的指针。最初,指针设置为指向与指针this相同的位置,因此它指向当前对象。

然后,环路内,则node指针被设置为指向其它东西,而在最后一行的新值(“最后”)被存储在恰好由指出的对象的字段的一个循环后的指针node

如果循环根本没有循环,那么node仍然指向当前对象,所以当前对象被修改。如果循环环绕一次或多次,则node指向其他某个对象,以便修改其他对象。

任何时候都不会尝试更改this指针,并且不会尝试这样做,因为这在java中是非法的。