4

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

变量访问是一个int。

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

3 回答 3

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 中的。这意味着评估从左到右进行。如果评估表达式的第二部分没有意义,则不会对其进行评估。

在上述情况下,由于表达式的第一部分计算结果为假,因此表达式的第二部分计算结果无关紧要 - 给定 AND 真值表,完整的表达式将始终计算结果为假。事实上,你可以有一个在右侧生成运行时错误的表达式——没关系。有了这些值,就永远不会运行右侧。

于 2013-05-22T19:26:57.177 回答
5

右边的整个表达式return计算为一个布尔值,这就是返回的值。

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

相当于:

boolean result = (access != IACL.RS_NOACCESS);
result = result && (documentVersion >= 0);
return result;
于 2013-05-22T19:23:28.657 回答
2

这相当于:

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

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

于 2013-05-22T19:25:22.257 回答