当我使用 && 运算符比较两组表达式时,是否必须放入内括号?
Do I have to put inner parantheses when I compare two sets of expressions using the && operator?
对于这个表达式:
((a == b && b == c) && (a == b || b == c || a == c))
这样写合法吗:
(a == b && b == c && a == b || b == c || a == c)
我想比较第一组和第二组。
a
、b
和 c
是整数:
private int a;
private int b;
private int c;
合法,但意义不同
由于 &&
的优先级高于 ||
并且运算符从左到右关联,因此您的第二个示例被解析为
((a == b && b == c) && a == b) || b == c || a == c
AND (&&) 运算符的优先级高于 OR (||) 运算符。这意味着最后的比较表达式:
- b == c
- a == c
将在表达式的前半部分之后计算。之后将计算 OR 运算符。所以,是的,它在你的情况下是合法的,但return 不同的答案。
您的条件将计算如下:
((a == b && b == c) && a == b) || b == c || a == c
不,不是。 &&
是关联的:A && B && C
与 A && (B && C)
和 (A && B) && C
相同,||
也是:A || B || C
与 A || (B || C)
和 (A || B) || C
.
但是,当涉及两个不同的操作时,它不起作用:(A && B) || C
与 A && (B || C)
非常不同。此外,由于 &&
比 ||
绑定更紧密,因此 A && B || C
与前者相同,而与后者不同。
因此,你的第一个例子
((a == b && b == c) && (a == b || b == c || a == c))
相当于
(a == b && b == c && (a == b || b == c || a == c))
但是你的第二个例子
(a == b && b == c && a == b || b == c || a == c)
相当于一个完全不同的东西:
((a == b && b == c && a == b) || b == c || a == c)
(正如 Kayaman 在评论中指出的那样,在这个特定示例 中它是无关紧要的 ,因为它们都可以减少到仅 (a == b && b == c)
,凭借您的示例中使用的特定谓词;因此,虽然它们在这个特定示例中是相同的,但您仍然应该理解通常使用的关联性和优先级的概念。)
对于这个表达式:
((a == b && b == c) && (a == b || b == c || a == c))
这样写合法吗:
(a == b && b == c && a == b || b == c || a == c)
我想比较第一组和第二组。
a
、b
和 c
是整数:
private int a;
private int b;
private int c;
合法,但意义不同
由于 &&
的优先级高于 ||
并且运算符从左到右关联,因此您的第二个示例被解析为
((a == b && b == c) && a == b) || b == c || a == c
AND (&&) 运算符的优先级高于 OR (||) 运算符。这意味着最后的比较表达式:
- b == c
- a == c
将在表达式的前半部分之后计算。之后将计算 OR 运算符。所以,是的,它在你的情况下是合法的,但return 不同的答案。
您的条件将计算如下:
((a == b && b == c) && a == b) || b == c || a == c
不,不是。 &&
是关联的:A && B && C
与 A && (B && C)
和 (A && B) && C
相同,||
也是:A || B || C
与 A || (B || C)
和 (A || B) || C
.
但是,当涉及两个不同的操作时,它不起作用:(A && B) || C
与 A && (B || C)
非常不同。此外,由于 &&
比 ||
绑定更紧密,因此 A && B || C
与前者相同,而与后者不同。
因此,你的第一个例子
((a == b && b == c) && (a == b || b == c || a == c))
相当于
(a == b && b == c && (a == b || b == c || a == c))
但是你的第二个例子
(a == b && b == c && a == b || b == c || a == c)
相当于一个完全不同的东西:
((a == b && b == c && a == b) || b == c || a == c)
(正如 Kayaman 在评论中指出的那样,在这个特定示例 中它是无关紧要的 ,因为它们都可以减少到仅 (a == b && b == c)
,凭借您的示例中使用的特定谓词;因此,虽然它们在这个特定示例中是相同的,但您仍然应该理解通常使用的关联性和优先级的概念。)