我在PHP中工作2年後返回Java。 很抱歉,如果這似乎愚蠢:Java遞歸按值傳遞/參考
這是代碼(圖的深度優先遍歷):
public List<List<Edge>> paths = new ArrayList<>();
public void traverse(Edge edge, List<Edge> currentPath){
String vertex = graph.getEdgeTarget(edge);
if(edge!=null) currentPath.add(edge);
if(vertex=="TARGET_VERTEX"){
System.out.println(currentPath); // prints fine
paths.add(currentPath); // elements are empty at end of reccursion
if(edge!=null) currentPath.remove(edge);
return;
}
for(Edge e : graph.outgoingEdgesOf(vertex)){
traverse(e, currentPath);
}
if(edge!=null) path.remove(edge);
}
public void search(){
//graph is initalized, vertices and edges are added
for(Edge e : graph.outgoingEdgesOf("START_VERTEX")){
traverse(e, new ArrayList<Edge>());
}
System.out.println("############################");
System.out.println(paths);
System.out.println(paths.size());
}
有人可以解釋爲什麼在遞歸結束paths
具有空元素,以及如何使它包含我需要的路徑?
好像通過引用傳遞使我的問題...
ArrayList
具有淺clone()
方法,這將不可複製的元件(如每JavaDoc的)。
我是否需要創建一個臨時變量,它將手動複製currentPath
(遍歷值)?
我仍然有點困惑按值傳遞,並通過在Java引用,這在PHP是容易通過使用由基準通行區分(&variable
。)
感謝。
編輯,以便我不會抱怨字符串比較
Java是*通過值*。期。你也沒有正確比較字符串。 –
http://stackoverflow.com/questions/40480/is-java-pass-by-reference – assylias