2013-04-09 66 views
0

对吊索和Java很新,所以我提前道歉。但有没有人知道为什么当我在根目录下输出 我的路径两次?奇怪的是,它只发生在绝对根源上。方法重复输出

public static String generateTest(Page page, Page rootPage, String bc) { 

    Page parent = page.getParent(); 

    String bread = ""; 
    bread += (parent != null) ? "<li><a href=" + parent.getPath() + ">" + parent.getTitle() + "</a>" : ""; 
    bread += "<li>" + "<a href=" + page.getPath() + ">" + page.getTitle() + "</a></li>" + bc; 
    return (ifAtRoot(parent , rootPage)) ? breadcrumb : generateTest(parent, rootPage, bread); 

} 

public static boolean ifAtRoot(Page page, Page root) { 
    return (page == null || root.getPath() == page.getPath()); 
} 

任何帮助,不胜感激!

+0

'root.getPath()== page.getPath()'这里有些奇怪的东西.. – Maroun 2013-04-09 20:31:15

+0

请注意,这是http://stackoverflow.com/questions/15915244/java-recursive-function-duplicating输出AFAICS,使用相同的代码格式不同。 – 2013-04-11 07:08:29

回答

1

首先,ifAtRoot()将返回true只有pagenull因为你不能比较使用==对象(包括字符串)。您应该使用.equals()代替:

public static boolean ifAtRoot(Page page, Page root) { 
    return (page == null || root.getPath().equals(page.getPath())); 
} 

ifAtRoot()你的情况首先调用返回false,所以你把它称为第二次递归路过,只是已创建brend。第二次调用再次创建brend并将bc(包含先前创建的brend)附加到它。第二次致电ifAtRoot()为您的运气返回true。否则,您将输入无限递归并以StackOverflowError结束。

+0

感谢您回复@AlexR。虽然我有点困惑,但使用.equals而不是==似乎没有改变任何东西。另外,如果我正在使用==而不是.equals()不会完全失败。谢谢您的帮助! – 2013-04-09 20:50:20