首页 > 解决方案 > 使用 && 在Java中使用相同的变量分配给变量是否正确?

问题描述

我正在对旧代码进行一些更改而不是需要维护,我发现了类似这样的东西

public boolean aMethod(){
    boolean isValid = true;

    **isValid = isValid &&** executeGetDocs(id.toString(),program().toString(), document.get(name));

  return isValid;
}

方法executeGetDocs可能返回 true 或 false。

但我不确定: **isValid = isValid && executeGetDocs ** 是正确的还是只是多余的。

所以我在这里,有人可以请给我一些解释吗?

非常感谢!

已编辑

整体方法:

private boolean validateDocs(List<Map<String, Object>> documentsList) {
        boolean isValid = true;
        StringBuilder gradoAntComp = new StringBuilder();
        for (Map<String, Object> document : documentsList) {
            String id = document.get("ID_DOC").toString();
            if (id.equalsIgnoreCase("25")) {
                isValid = getData(id.toString(),program().toString(), document.get(name))
            } else if (id.equalsIgnoreCase("26") ) {
                isValid = isValid && getDocs(id.toString(),program().toString(), document.get(name));
            } 
        }
        return isValid;
    }

标签: javaperformanceoptimizationboolean

解决方案


并不是说我们看到了你的整个方法,我们可以看到你试图isValid在一个循环中分配。以这种方式编写,代码使用&&条件与运算符仅执行getDocsif isValidis still方法true

如果之前的赋值将isValid其设置为false,则getDocs甚至不会被调用;它会短路。这意味着&&操作员已经知道表达式的结果将是false,因为isValidfalse,所以它“短路”了评估并且不评估另一个操作数——对 的调用getDocs

这很有意义,特别是如果getDocs是一种开销很大的方法。


推荐阅读