Java 方法复制输出

Java 方法复制输出,java,performance,sling,Java,Performance,Sling,对sling和Java来说是个新手,所以我提前道歉。但是有人知道为什么当我在根的时候它会输出吗 我的路走了两次?奇怪的是,它只发生在绝对根上 public static String generateTest(Page page, Page rootPage, String bc) { Page parent = page.getParent(); String bread = ""; bread += (parent != null) ? "<li>&

对sling和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());
}
publicstaticstringgenerateTest(Page-Page,Page-rootPage,stringbc){
Page parent=Page.getParent();
线面包=”;
面包+=(父项!=null)?“
  • ”:”; 面包+=“
  • ”+“
  • ”+bc; 返回(ifAtRoot(父,根页面))?面包屑:generateTest(父,根页面,面包); } 公共静态布尔值IFATROT(页面,页面根){ 返回(page==null | | root.getPath()==page.getPath()); }
    非常感谢您的帮助

    首先,
    ifatrot()
    仅当
    页面
    null
    时才会返回true,因为您无法使用
    =
    比较对象(包括字符串)。您应该改用
    .equals()

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

    在您的例子中,
    ifAtRoot()
    的第一次调用返回了
    false
    ,因此您第二次递归调用它时传递了刚刚创建的
    brend
    。第二个调用再次创建
    brend
    ,并将
    bc
    (包含以前创建的brend)附加到它。第二次调用
    ifatrout()
    ,为您的运气返回true。否则,您将进入无限递归并以
    StackOverflowError
    结束

    root.getPath()==page.getPath()
    这里有些奇怪。请注意,这是AFAICS的副本,相同的代码格式不同。感谢回复@AlexR。虽然我对使用.equals代替==有点困惑,但似乎并没有改变任何事情。另外,如果我使用==而不是.equals(),这不会完全失败。谢谢你的帮助!