当我使用 && 运算符比较两组表达式时,我是否必须放置内部参数?



对于此表达式:

((a == b && b == c) && (a == b || b == c || a == c))

这样写是否合法:

(a == b && b == c && a == b || b == c || a == c)

我想比较第一组和第二组。

abc是整数:

private int a;
private int b;
private int c;

不,不是。&&是关联性的:A && B && CA && (B && C)(A && B) && C相同,||也是:A || B || CA || (B || C)(A || B) || C相同。

但是,当涉及两个不同的操作时,它不起作用:(A && B) || CA && (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

AND (&&( 运算符的优先级高于 OR (||( 运算符。这意味着最后一个比较表达式:

  • b == c
  • a == c

将在表达式的前半部分后计算。之后将计算 OR 运算符。所以,是的,这在您的情况下是合法的,但会返回不同的答案

您的状况将按如下方式计算:

((a == b && b == c) && a == b) || b == c || a == c

最新更新