我知道这可能是一个非常简单的问题,但今天在项目中的一些代码中遇到了这个问题。return语句如何工作?这是什么样的操作?它类似于三目运算符吗?
变量access是一个整数。
return access != IACL.RS_NOACCESS && documentVersion >= 0;
我知道这可能是一个非常简单的问题,但今天在项目中的一些代码中遇到了这个问题。return语句如何工作?这是什么样的操作?它类似于三目运算符吗?
变量access是一个整数。
return access != IACL.RS_NOACCESS && documentVersion >= 0;
让我们来分解一下,使用括号明确逻辑分组:
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;
false && a
总是假的。所以 false && a()
不会调用 a()
。如果想无论如何都要调用 a()
,可以使用 false & a()
。 - Ryan Amosa()
吗? - Trevora()
改变了状态,你需要执行两个动作,但如果任何一个动作失败,你想返回false。我记得过去必须处理这个问题,但我现在脑海中想不出任何好的例子。 - Ryan Amosif(finder.isDirectoryExSTraCS(finder.chooser.getCurrentDirectory())|| JOptionPane.showConfirmDialog(finder, "It doesn't appear that this directory is an ExSTraCS directory. Proceed anyways?", "Wrong Directory", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION)
。 - Ryan Amosreturn
右侧的整个表达式将被求值为布尔值,这就是返回的结果。
return access != IACL.RS_NOACCESS && documentVersion >= 0;
等价于:
boolean result = (access != IACL.RS_NOACCESS);
result = result && (documentVersion >= 0);
return result;
这相当于:
boolean valid = access != IACL.RS_NOACCESS && documentVersion >= 0;
return valid;
这仅仅是为了节省空间,因此不必存储access != IACL.RS_NOACCESS && documentVersion >= 0
的结果,从而消除了变量。
return (some expression)
,不比return (1+2)
复杂。 - 9000