Java &;之间的条件排序是否有差异&;操作人员
我是java的新手,在这里练习了一些leetcode: 我对这个问题的解决办法是:Java &;之间的条件排序是否有差异&;操作人员,java,conditional-statements,Java,Conditional Statements,我是java的新手,在这里练习了一些leetcode: 我对这个问题的解决办法是: class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null){ return true; } return (p.val == q.val)&&(p != null &&
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null){
return true;
}
return (p.val == q.val)&&(p != null && q != null)&&
isSameTree(p.left, q.left)&&
isSameTree(p.right, q.right);
}
}
我就是不能让它工作,导致了一个空指针错误。但这仅仅是条件的转换:
return (p != null && q != null)&&(p.val == q.val)&&
isSameTree(p.left, q.left)&&
isSameTree(p.right, q.right);
突然之间,它起了作用。不知道为什么。我认为&&是一个逻辑and运算符,所以a和B与B和a是一样的。。。发生了什么事?为了使&&operator检索到true,所有条件都需要返回true,因此我们首先检查左侧条件,只有当其为true时,我们才逐个检查其余条件, 如果任何条件失败,我们将停止检查所有其他条件 因此,在您的情况下,您需要首先获得所有低复杂度的操作 更多关于短路评估的阅读
为了&&operator检索true,所有条件都需要返回true,因此我们首先检查左侧条件,只有当其为true时,我们才逐个检查其余条件, 如果任何条件失败,我们将停止检查所有其他条件 因此,在您的情况下,您需要首先获得所有低复杂度的操作 更多关于短路评估的阅读
在大多数编程语言中,表达式是从左到右求值的。在前面的方法中,
p.val
在p
为null时可能会导致NullPointerException。为了避免这种情况,您应该在和/或表达式中始终检查空条件。这正是您所做的(我猜您没有意识到。)在大多数编程语言中,表达式是从左到右求值的。在前面的方法中,p.val
在p
为null时可能会导致NullPointerException。为了避免这种情况,您应该在和/或表达式中始终检查空条件。这正是你所做的(我猜是没有意识到的)。在数学或布尔代数或其他方面,AND运算符具有联想和交换属性,所以在数学方面,不是
然而,大多数编程语言对布尔and运算符使用延迟求值。如果第一个操作数是false
,而运算符是&&
,那么如果知道第二个操作数将返回false,为什么还要费心计算它呢
使用它,您可以通过更改操作数的顺序来避免错误(如您发布的错误)
例如,如果您想避免在尝试访问对象的成员时出现
对象未定义
错误,您可以在(object!=undefined&&object.isExample)时执行操作。如果对象未定义,则它知道该表达式为false,并退出该表达式。在数学或布尔代数中,and运算符具有关联性和交换性,因此在数学方面,不会
然而,大多数编程语言对布尔and运算符使用延迟求值。如果第一个操作数是false
,而运算符是&&
,那么如果知道第二个操作数将返回false,为什么还要费心计算它呢
使用它,您可以通过更改操作数的顺序来避免错误(如您发布的错误)
例如,如果您想避免在尝试访问对象的成员时出现对象未定义
错误,您可以在(object!=undefined&&object.isExample)
时执行操作。如果对象
未定义,则它知道该表达式为false并退出该表达式。在逻辑中&&运算符代表“and”,仅当两个条件都为true时才返回true。
因此,首先检查左侧条件,如果为false,则不检查右侧条件。
因此,我建议您按此顺序放置条件(此顺序中的较高者应为左侧条件):
必须在工作条件(例如非空条件)之前进行检查
低时间复杂度条件(例如检查变量的值)
高时间复杂度条件(例如在数组中搜索/排序)
&&运算符在逻辑中代表“and”,只有当两个条件都为true时,才会返回true。
因此,首先检查左侧条件,如果为false,则不检查右侧条件。
因此,我建议您按此顺序放置条件(此顺序中的较高者应为左侧条件):
必须在工作条件(例如非空条件)之前进行检查
低时间复杂度条件(例如检查变量的值)
高时间复杂度条件(例如在数组中搜索/排序)
首先检查左侧条件。这种行为称为短路评估。首先检查左侧条件。这种行为称为短路评估。