在Java 8中,Boolean添加了类中的新方法。
让我们只谈论其中之一
public static boolean Boolean.logicalOr(boolean a , boolean b)
现在,我的问题是,为什么需要它们?
以下两种情况有什么区别?
boolean result = a || b; 要么 Boolean result = Boolean.logicalOr(a,b);
有什么特别之处Boolean.logicalOr(),我什么时候应该更喜欢一个。
在Java 8中,Boolean添加了类中的新方法。
让我们只谈论其中之一
public static boolean Boolean.logicalOr(boolean a , boolean b)
现在,我的问题是,为什么需要它们?
以下两种情况有什么区别?
boolean result = a || b; 要么 Boolean result = Boolean.logicalOr(a,b);
有什么特别之处Boolean.logicalOr(),我什么时候应该更喜欢一个。
Boolean.logicalOr(a,b)用您的代码编写。当您使用多种功能相同的方式编写代码时,应始终选择可读性最高的方式。
                Boolean.logicalOr(a, b)而不是a || b减少需要进行单元测试的分支的数量,从而增加测试代码的覆盖范围。缺点是您通常应该测试所有可能性,而Boolean.logicalOr(a, b)不会强迫您这样做a || b。但是,如果这是您确定不需要测试某些可能性的情况之一,则Boolean.logicalOr可以使您不必为覆盖范围编写毫无意义,荒谬的测试。
                Answers:
主要是那些方法是为了您的方便,并通过使用lambdas / streams中的方法引用使代码更具可读性。让我们看一个例子:
Stream.of(/* .. some objects .. */)
      .map(/* some function that returns a boolean */)
      .reduce(Boolean::logicalOr);
试图写这个a || b:
Stream.of(...)
      .map(...)
      .reduce((a, b) -> a || b); // logicalOr is actually using ||
不那么可读,对不对?
正如Sotirios Delimanolis在评论中所述,您可能还想看看javadoc并关注@see BinaryOperator。或查看功能包摘要javadoc。
|也可以是逻辑,也可以不是短路。
                    |则仍然可以正常工作而不会抱怨,而||不会通过编译
                    ||和&&作为函数编写,那么在我看来..不如方法引用可读。然后,您可能需要仔细检查自己是否没有忽略!;-)
                    Optional<Boolean>因为reduce返回一个Optional -在映射为空的情况下为空,因此,如果您想像我一样组合一堆布尔值,则需要做一个final.orElse(...)指定在空集合情况下采用什么值。
                    它与方法引用有关。这样,您也可以||在lambda中使用(逻辑或)运算符。
以这种方式,还有其他新功能,例如Objects.isNulletc。
使用函数引用而不是lambda表达式(例如(a,b) -> a || b)更符合流和lambda的“外观”。
同样,方法引用将产生较少的字节码,因此意味着更快的执行时间(至少一点点)。
||。
                    Boolean::logicalOr和之间没有区别(a,b)->a||b,因为对函数求值总是意味着在执行代码之前对所有参数进行求值。
                    a method reference will produce less byte code, and thus mean faster execution times较小的.class文件,也许;但是一旦字节码由JIT编译为汇编程序,原始字节码变大或变小就没有执行速度。
                    以下两种情况有什么区别?
布尔结果= a || b; 或布尔结果= Boolean.logicalOr(a,b);
关于上述问题,我想在这里发表我的观点。这是尸体Boolean.logicalOr
  public static boolean logicalOr(boolean paramBoolean1, boolean paramBoolean2)
  {
    return (paramBoolean1) || (paramBoolean2);
  }
因此,我们可以看到它a || b最终正在做。但是,当我们使用Boolean.logicalOr而不是时,它将变为非短路||。因为它将(Boolean.logicalOr)视为与其他逻辑运算符附带的(a || b)不同a || b。
示例-:请参考下面的代码段...
public static void main(String[] args) {
    boolean bCheck1 = false, bCheck2 = true, bCheck3 = false;
    System.out.println("bCheck1\t" + "bCheck2\t" + "bCheck3\t" + "checkOR-Result\t" + "checkLogicalOr-Result");
    bCheck1 = true; bCheck2 = true; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = true; bCheck2 = true; bCheck3 = false;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = true; bCheck2 = false; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = true; bCheck2 = false; bCheck3 = false;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = true; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = true; bCheck3 = false;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = false; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = false; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
}
private static boolean checkOR(boolean bCheck1, boolean bCheck2, boolean bCheck3){
    return bCheck1 && bCheck2 || bCheck3;
}
private static boolean checkLogicalOr(boolean bCheck1, boolean bCheck2, boolean bCheck3){
    return bCheck1 && Boolean.logicalOr(bCheck2, bCheck3);
}
以下是结果-:
bCheck1 bCheck2 bCheck3 checkOR-Result  checkLogicalOr-Result
true    true    true    true            true
true    true    false   true            true
true    false   true    true            true
true    false   false   false           false
false   true    true    true            false
false   true    false   false           false
false   false   true    true            false
false   false   true    true            false
我们可以看到,与其他逻辑运算符一起使用时,它会产生不同的结果。因此,需要谨慎使用||over Boolean.logicalOr,反之亦然。显然Boolean.logicalOr比更具可读性||。但是每个都有其重要性,可以按以下方式使用。
if(bCheck1 && bCheck2 || bCheck3)不能替换为,if(bCheck1 && Boolean.logicalOr(bCheck2, bCheck3))
但是替换if(bCheck1 && (bCheck2 || bCheck3))为if(bCheck1 && Boolean.logicalOr(bCheck2, bCheck3))绝对是个好主意。
@see可能有用的参考?