Jaka jest różnica między dwoma następującymi przypadkami.
wynik boolowski = a || b; lub Boolean result = Boolean.logicalOr (a, b);
Chciałbym przedstawić moje uwagi dotyczące powyższego pytania. Oto ciało Boolean.logicalOr
public static boolean logicalOr(boolean paramBoolean1, boolean paramBoolean2)
{
return (paramBoolean1) || (paramBoolean2);
}
Widzimy więc, że robi a || b
ostatecznie. Ale staje się nie zwarcie, gdy używamy Boolean.logicalOr
zamiast ||
. Ponieważ (Boolean.logicalOr
) będzie traktowany jako (a || b)
, który różni się od a || b
, gdy jest dostarczany z innymi operatorami logicznymi.
Przykład-: zapoznaj się z poniższym fragmentem kodu ...
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);
}
Poniżej są WYNIKI:
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
Widzimy to produkujące różne wyniki, kiedy to był używany z innego operatora logicznego. Dlatego należy zachować ostrożność w używaniu ||
przez Boolean.logicalOr
lub odwrotnie. Oczywiście Boolean.logicalOr
jest bardziej czytelny niż ||
. Ale każdy ma swoje znaczenie i może być użyty jak poniżej.
if(bCheck1 && bCheck2 || bCheck3)
nie może być zastąpiony przez if(bCheck1 && Boolean.logicalOr(bCheck2, bCheck3))
Jednak zastąpienie if(bCheck1 && (bCheck2 || bCheck3))
na if(bCheck1 && Boolean.logicalOr(bCheck2, bCheck3))
zdecydowanie byłoby dobrym pomysłem.
Co mówi javadoc? Czy pomocna może być referencja '@ see'? –
Funkcjonalnie są identyczne, ale proszę nie wpisywać w swoim kodzie "Boolean.logicalOr (a, b)". Kiedy masz wiele identycznych funkcjonalnie sposobów pisania kodu, zawsze powinieneś wybrać najbardziej czytelny. – VGR