![](/img/trans.png)
[英]In play 2.0.3, I have 'sets' of images that I want to categorise and put in the database when I start the server
[英]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
不它不是。 &&
是关联的: 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) || 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)
;因此,虽然它们在这个特定示例中是相同的,但您仍然应该理解通常使用的关联性和优先级的概念。)
AND (&&) 运算符的优先级高于 OR (||) 运算符。 这意味着最后的比较表达式:
将在表达式的前半部分之后计算。 之后将计算 OR 运算符。 所以,是的,这在您的情况下是合法的,但会返回不同的答案。
您的条件将计算如下:
((a == b && b == c) && a == b) || b == c || a == c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.