我知道这可能是一个非常简单的问题,但我今天在一个项目的代码中遇到了这个问题。 return语句如何工作?这是什么操作?它类似于第三级运营商吗?
变量访问是一个int。
return access != IACL.RS_NOACCESS && documentVersion >= 0;
答案 0 :(得分:8)
让我们将其分解,使用括号使逻辑分组明确:
return ((access != IACL.RS_NOACCESS) && (documentVersion >= 0));
因此,该方法返回一个布尔值,即执行比较的结果。在返回表达式的值之前评估整个表达式。
让我们假装access
等于IACL.RS_NOACCESS
且documentVersion
等于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
的结果。基本上只是为了节省空间。