在哪些情况下最好使用无条件 AND(&而不是 &&)

2022-08-31 22:18:27

我想知道在Java(或更一般地说:在编程中)的一些情况,当在布尔表达式中最好使用无条件()而不是条件版本()。AND&&&

我知道它们是如何工作的,但是当使用单曲是值得的时,我无法想到这种情况。&


答案 1

我在现实生活中发现,表达式的两面都非常便宜,因此它削减了一两纳秒以避免分支并使用无条件而不是。(不过,这些都是非常高性能的数学实用程序。我几乎永远不会在其他代码中使用它,如果没有详尽的基准测试来证明它更好,我也不会这样做。&&&

(举个具体的例子,将是超级便宜和无副作用的。为什么要冒着分支错误预测的风险来避免无论如何都会如此便宜的测试呢?当然,因为它是最终结果,无论如何都会在分支中使用,但涉及两个分支,并且只涉及一个分支。x > 0booleanif (x >= 0 && x <= 10)if (x >= 0 & x <= 10)


答案 2

唯一的区别是,一旦知道,就停止评估。例如:&&||

if (a != null && a.get() != null)

与 配合使用效果很好,但如果 a 为 null,则可以获得 NullPointerException。&&&

例如,我可以考虑要使用的唯一情况是,如果第二个操作数有副作用(可能不是最好的例子,但你明白了):&

public static void main(String[] args) {
    int i = 1;
    if (i == 0 & ++i != 2) {
    }
    System.out.println(i); //2
    i = 1;
    if (i == 0 && ++i != 2) {
    }
    System.out.println(i); //1
}

但是,这对我来说看起来像臭代码(在这两种情况下)。


推荐