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

什么是短路?在Java中编程时如何使用短路?[重复]

景俊拔
2023-03-14
问题内容

我想知道是否有人可以解释什么是短路,也许是在简单的Java程序中使用的一个例子。谢谢你的帮助!


问题答案:

短路是确定结果后立即停止对表达式求值的地方。因此,例如:

if (a == b || c == d || e == f) {
    // Do something
}

如果a == btrue,则c == d并且e == f根本不会进行评估,因为表达式的结果已经确定。如果a == b为假,c == d则被评估;如果是真的,则e == f永远不会进行评估。这似乎没有什么区别,但请考虑:

if (foo() || bar() || baz()) {
    // Do something
}

如果foo()返回true,那么barbaz被从来没有所谓,因为表达式的结果已经确定。所以,如果bar还是baz已经不仅仅是返回的东西(一个其他一些效果副作用),这些影响不会发生。

短路的一个很好的例子与对象引用有关:

if (a != null && a.getFoo() != 42) {
    // Do something
}

a.getFoo()通常会抛出一个NullPointerException如果anull,但由于表达短路,如果a != nullfalse,该a.getFoo()部分不会发生,所以我们没有得到一个异常。

请注意,并非所有表达式都是短路的。的||&&运营商被短路,但|&不是,也不是*/; 实际上大多数操作员都不是。



 类似资料:
  • 问题内容: 阅读了有关Java 8的一些知识后,我进入了这篇博客文章,解释了有关流及其还原的一些知识,以及何时有可能使还原短路。在底部,它指出: 请注意,在或的情况下,我们只需要与谓词匹配的第一个值(尽管不能保证返回第一个)。但是,如果流没有排序,则我们的行为应类似于。的操作,并且可能不会短路,因为在所有它的流可能需要评估所有的值,以确定操作者是否是或。因此,使用它们的无限流可能不会终止。 我知道

  • 本文向大家介绍举例说明什么是短路求值?相关面试题,主要包含被问及举例说明什么是短路求值?时的应答技巧和注意事项,需要的朋友参考一下 短路求值即利用 (逻辑或) 和 (逻辑与)的短路特性进行赋值: 当值为truthy时,取的值,否则取。这样可以避免被赋为、、、等值。 当值为truthy时,再去取并返回其值,否则返回。这样可以避免为空时,报空指针异常。

  • 问题内容: 换句话说,以下两个语句的行为是否相同? 我意识到我可以编写一个测试,但是有人可能对此一无所知,而其他人可能会找到有用的答案。 问题答案: 不,并没有短路,因为它们的复合赋值版本和等不短路。 [JLS 15.26.2复合赋值运算符](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.2

  • 问题内容: 假设我有一个布尔值流,而我正在编写的reduce操作是||(OR)。我是否可以这样编写它:如果true遇到值,则放弃对至少某些元素的求值? 我正在寻找某种程度的优化(也许是并行流),不一定要完全优化,尽管后者会很棒。 问题答案: 我怀疑您想要这种构造。 你可以看一下 Stream.of(1, 2, 3, 4).peek(System.out::println).anyMatch(i -

  • 问题内容: 我正在尝试在SQL Server中执行以下查询: 显然这会导致错误,因为无法将“ asdas”转换为。虽然,我期待一个不同的行为。也就是说,因为为假,所以我期望SQL不检查第二个条件,但显然可以。 我知道还有其他一些方法可以执行此查询,但这不是我的问题。我想知道是否有某种方法可以不检查第二个条件,即第一个条件不满足。我很好奇,因为我认为SQL已经做到了这一点。 问题答案: SQL Se

  • 我有这个Go模板: 我正在尝试使用此模板: 然而,它不起作用,因为正如text/templategodoc所说,对和/或函数的参数都进行了求值。 当<code>$b.Trigger时。名称被求值,因为可以为零。因此它返回错误: