当前位置: 首页 > 面试题库 >

此Java代码中的短路逻辑有什么问题?

阮炯
2023-03-14
问题内容

为什么在下面的程序中不执行func3?在func1之后,不需要对func2进行评估,但是对于func3,不是吗?

if (func1() || func2() && func3()) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }
}

public static boolean func1() {
    System.out.println("func1");
    return true;
}

public static boolean func2() {
    System.out.println("func2");
    return false;
}

public static boolean func3() {
    System.out.println("func3");
    return false;
}

问题答案:

您正在使用短路或。如果第一个参数为true,则整个表达式为true。

如果添加编译器使用的隐式括号可能会有所帮助

编辑 :正如Chris Jester-Young所说,这实际上是因为逻辑运算符必须从左到右的关联性:

if (func1() || (func2() && func3()))

func1返回之后,它变为:

if (true || (func2() && func3()))

评估短路或后,它变为:

if (true)


 类似资料:
  • 哪个集合是短路的,复杂条件表达式是短路的确切含义是什么?

  • 问题内容: 哪一组短路,这到底意味着复杂的条件表达式短路了? 问题答案: 在与运营商“短路”,这意味着如果没有必要,他们不评价的右手边。 在与运营商,如逻辑运算符时,始终评估两侧。 每个操作员只有一种短路情况,它们是: -不必知道右侧是什么,结果必须是 -不必知道右侧是什么,结果必须是 让我们在一个简单的示例中比较行为: 第二个版本使用非短路运算符,并将抛出,但第一个版本将无例外地返回;

  • 这个问题不是关于优化代码的问题,而是一个关于短路逻辑运算符和普通逻辑运算符性能差异的技术问题,这可以归结为它们在硬件上如何执行。 是的,如果右操作数是昂贵的,那么尝试不求值它是有益的。但是对于像这样的简单条件,假设这些是原子变量,非短路逻辑运算符可能执行得更快。我说的对吗? 我假设短路逻辑运算符使用分支(没有官方来源,只是自己想的),因为如果不这样的话,你如何在按顺序执行指令的同时做出那些跳跃呢?

  • 问题内容: 我碰到了Java行,并对它的输出感到困惑。您能否解释一下此代码背后的逻辑 输出: 问题答案: 好吧,它等效于: 真正地将原始内容显式转换为只是使其调用而不是。 我相信to 转换 实际上首先 要进行隐式加宽转换-就像这样: 这些帮助有用?

  • 问题内容: 我可以在MySQL 5.5的子句中使用任何短路逻辑运算符(特别是短路和短路)吗?如果没有,那还有什么选择? 在这个小提琴中可以找到关于我的问题的抽象观点以及对我为什么需要它的解释: http://sqlfiddle.com/#!2/97fd1/3 实际上,我们正在数百个国家/地区的数以千计的城市中的数百万家书店中查找数百万本图书,这就是为什么我们无法接受我们发送的每个查询都收到不必要信