Java && || 在RETURN语句中?

Sam*_*eow 7 java algorithm syntax recursion return

我正在看一些Java算法示例,我在递归方法中遇到了这个代码片段:

boolean subTree(TreeNode t1, TreeNode t2) {
    if (t1 == null) {
        return false;
    }
    if (t1.value == t2.value) {
        if (treeMatch(t1, t2))
            return true;;
    }
    return (subTree(t1.left, t2) || subTree(t1.right, t2));
}
Run Code Online (Sandbox Code Playgroud)

不知道(也从未见过)|| 在之前的返回语句中使用,更不用说递归语句了,真让我感到困惑.我将代码复制到Eclipse中以查看它是否有效.然后我替换了|| 用&&​​和Eclipse似乎并没有被它打扰.从逻辑上讲,我理解这个递归代码应该继续沿着TreeNode t1的左右子树,但我正在寻找关于这种Java语法如何工作的更多理论解释.

有人可以解释||背后的含义 和Java的返回声明中的&&?在递归方面它意味着什么?它是否仅在与递归一起使用时才有意义?

Kon*_*kov 12

如方法签名中所定义,您必须返回一个boolean.因此,在return关键字之后,您将必须提供一个boolean 或一个被评估的表达式boolean.

在你的情况下,你有(subTree(t1.left, t2) || subTree(t1.right, t2));两个操作数将被评估的开发,只有当第一个评估时才会对它们boolean应用逻辑.如果第一个操作数计算到第二个操作数将不会被评估并将被撤销.ORfalsetruetrue


Mar*_*nov 9

无论是否存在递归语句,它们都以相同的方式工作.在你的表达中:

(subTree(t1.left, t2) || subTree(t1.right, t2))
Run Code Online (Sandbox Code Playgroud)

如果第一次调用subTree(t1.left, t2)求值true,则不会调用或尝试计算第二个表达式.这只是||&&运算符的标准短路行为,也就是运算符如何处理赋予它们的任何参数.