【问题标题】:Java - The difference between || and | [duplicate]Java - || 之间的区别和 | [复制]
【发布时间】:2017-06-21 10:15:24
【问题描述】:

我在各州工作的一本书:

短路运算符与逻辑运算符几乎相同, 分别为&|,但如果最终结果可以由表达式的左侧确定,则表达式的右侧可能永远不会被计算

为了测试这个我试过了

int y = 1;

boolean x = false | (y < 4);

System.out.print(x);    //true

如预期的那样打印出 true。

然而

int y = 1;

boolean x = false || (y < 4);

System.out.print(x);    //true

还打印出 true 这似乎与书“如果最终结果可以由表达式的左侧确定,则表达式的右侧可能永远不会被计算”相矛盾。

我假设 x 将采用 false 的值,因为最终结果可以仅从左侧确定

【问题讨论】:

  • 仅当无法从左侧确定结果时才评估右侧。
  • 您需要查看 RH 操作数来评估 false || rh,因为它的值等于 rh
  • 当其中一个操作数为真时,or 表达式为真。因此,在测试第一个等于 false 之后,它会测试第二个,它的计算结果为 true。如果第一个评估为真,它将短路。
  • 也许this application 会更清楚。这两个表达式都表示true OR true,最终都等于true。然而,逻辑 OR 足够聪明,可以知道true OR {anything} 的计算结果总是true。因此,它不会打扰调用函数foo,并且永远不会打印字符串“逻辑或”。

标签: java boolean operator-keyword


【解决方案1】:

我假设 x 将采用 false 的值,因为最终结果可以仅从左侧确定

不,最终结果不能仅由左侧确定 - 因为左侧操作数是 false,所以右侧操作数也必须计算(因为 false OR something == something)。

另一方面,如果左操作数是true,则OR运算符的结果将是true,而右操作数可以忽略。

您应该了解,短路运算符应该给出与非短路运算符相同的结果(除了计算右操作数可能引发异常并且短路运算符可以通过左操作数确定结果的情况独自的)。

不会出现短路运算符返回false 而相应的非短路运算符返回true 或反之亦然的情况。

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 2014-11-01
    • 2013-07-01
    • 1970-01-01
    • 2011-03-15
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多