布尔逻辑转换规则解释这个切换到Java ==?

时间:2013-01-12 00:35:12

标签: java logical-operators boolean-logic

我正在对CodingBat进行练习。在此page上,解决方案中提到了这一点:

  // The above can be shortened to:
  //   return ((aSmile && bSmile) || (!aSmile && !bSmile));
  // Or this very short version (think about how this is the same as the above)
  //   return (aSmile == bSmile);

有没有解释短版本的规则?你怎么从逻辑AND到等于?

3 个答案:

答案 0 :(得分:5)

第一个条件基本上说:如果两者都是真或两者都是假的。只有在他们平等时才会发生这种情况。

请注意,在Java中,有一个布尔对象的陷阱,其中将打印以下两个内容:

Boolean aSmile=new Boolean(true),bSmile=new Boolean(true);
if((aSmile & bSmile) || (!aSmile && !bSmile)) { System.out.println("SAME"); }
if(aSmile!=bSmile)                            { System.out.println("NOT THE SAME"); }

答案 1 :(得分:2)

解释这两个表达式的等效性的最简单方法是创建一个逻辑表:

aSmile  |  bSmile
   0         0     1
   0         1     0
   1         0     0
   1         1     1

插入&的所有组合b在第一个表达式中,您可以看到第一个表达式仅在aSmile和bSmile相等时才为真。所以aSmile == bSmile只有在它们相等时才会返回true。

答案 2 :(得分:2)

如果(aSmile && bSmile)评估为真,那么两者都是真的。

如果(!aSmile && !bSmile)评估为真,那么两者都是假的。

因此,如果这些条件中的任何一个(均为TRUE,或两者都为FALSE)为真,则长版本返回TRUE。

最简单地问(如在短版本中),是aSmile和bSmile等价吗?