返回语句,内置逻辑

时间:2013-05-22 19:22:31

标签: java boolean-logic

我知道这可能是一个非常简单的问题,但我今天在一个项目的代码中遇到了这个问题。 return语句如何工作?这是什么操作?它类似于第三级运营商吗?

变量访问是一个int。

return access != IACL.RS_NOACCESS && documentVersion >= 0;

3 个答案:

答案 0 :(得分:8)

让我们将其分解,使用括号使逻辑分组明确:

return ((access != IACL.RS_NOACCESS) && (documentVersion >= 0));

因此,该方法返回一个布尔值,即执行比较的结果。在返回表达式的值之前评估整个表达式。

让我们假装access等于IACL.RS_NOACCESSdocumentVersion等于1。然后声明缩小为:

return ((IACL.RS_NOACCESS != IACL.RS_NOACCESS) && (1 >= 0));

并评估为:

return ((false) && (true));

并评估为:

return false;

Ryan在评论中指出了一个重要的注意事项:逻辑运算符如&&和||在大多数情况下,在大多数语言中都是“短路”。他们是Java。这意味着评估从左到右进行。如果在评估表达式的第二部分时没有意义,那么它将不会被评估。

在上面的例子中,由于表达式的第一部分的计算结果为false,因此表达式的第二部分的计算结果并不重要 - 给定AND真值表,完整表达式将始终求值为false。实际上,你可能有一个表达式在右侧产生运行时错误 - 这没关系。使用这些值,右侧永远不会运行。

答案 1 :(得分:5)

return右边的整个表达式求值为一个布尔值,即返回的值。

return access != IACL.RS_NOACCESS && documentVersion >= 0;

相当于:

boolean result = (access != IACL.RS_NOACCESS);
result = result && (documentVersion >= 0);
return result;

答案 2 :(得分:2)

这相当于:

boolean valid = access != IACL.RS_NOACCESS && documentVersion >= 0;
return valid;

它只是消除了变量,因为没有必要存储access != IACL.RS_NOACCESS && documentVersion >= 0的结果。基本上只是为了节省空间。