2013-09-24 49 views
0

按值傳遞 - 通過引用 - 我一直在C++中執行此操作。但我想知道java的行爲。Java:返回實際對象與返回參考

我正在寫一個BST和變出以下方法:

private Node<T> get_node(T data) 
{ 
    Node<T> tmp = null; 
    if (isEmpty()) 
    { 
     return null; 
    } 
    tmp = root; 
    while (tmp != null) 
    { 
     //System.out.println("tmp is " + tmp.getData()); 
     if (compare(tmp.getData(), data) < 0) //data is greater 
     { 
      System.out.println("get right"); 
      tmp = tmp.getRight(); 
     } 
     else if (compare(tmp.getData(), data) < 0) //tmp is greater 
     { 
      System.out.println("get left"); 
      tmp = tmp.getLeft(); 
     } 
     else if (compare(tmp.getData(), data) == 0) //we found it 
     { 
      System.out.println("get left"); 
      return tmp; 
     } 
    } 
    return null; 
} 

這是BST類本身 - 我使用這個輔助函數來建立一個新的BST在「本」。

問題是,我不認爲這種方法實際上是返回實際節點。我認爲它正在返回一個副本或類似的東西對我沒用。我真的希望這個返回實際節點。

這是如何完成的?這完成了嗎?

+0

我想我的問題是,在這種情況下 - Java是「之類的」傳遞引用。在語言中是否還有一些方法可以接收實際的對象,還是隻有引用。 – PinkElephantsOnParade

+0

你爲什麼認爲它會返回一份副本? –

+0

這將返回對實際對象的引用,您可以使用所有預期的功能,除非getleft和getright方法執行復制對象等有趣事情。 – user2259824

回答

1

Java不通過引用傳遞它總是傳遞值。

對於對象,對象引用也作爲副本傳遞,所以如果您有引用的副本,您將能夠操縱值,但不要將此與傳遞引用混淆。

public void swap(Point a, Point b) 
{ 
    Point temp = a; 
    a = b; 
    b = temp; 
} 
Point x; 
Point y; 

swap(x, y); 

執行swap x和y後仍然有相同的引用。

但是,下面的代碼將更改數值

public void change(Point a) 
    { 
     a.x=10; //reference is copied but same, so value will change 
    } 
Point x; 
change(x);