2017-07-08 17 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中是非法的。