Wenn Sie ein wenig Java lernen, werden Sie etwas finden, das als "Kurzschlussbewertung" bezeichnet wird. das ist&&Oder||In einem logischen Operator, beispielsweise wenn die linke Seite ausgewertet wird, wird der Boolesche Wert des gesamten Ausdrucks bestimmt, und wenn die rechte Seite nicht ausgewertet werden muss, wird die rechte Seite nicht ausgewertet. Siehe folgendes Beispiel.
boolean flag1 = false;
boolean flag2 = false;
if(flag1 && flag2){
System.out.println("Beide Variablen sind wahr.");
}
In diesem Programm müssen Flag1 und Flag2 beide wahr sein, damit der bedingte Zweig in der dritten Zeile innerhalb des Blocks in mittleren Klammern ausgeführt wird. Dieses Mal ist flag1 falsch, sodass Sie sehen können, dass Sie nicht in den Block der mittleren Klammer gehen müssen, ohne den booleschen Wert von flag2 zu überprüfen. In einer solchen Situation ist die Kurzschlussauswertung eine Funktion, die verhindert, dass die Auswertung von Flag2 automatisch durchgeführt wird.
Java hat zwei ähnliche Operatoren, && und &. Die beiden Operatoren haben fast die gleiche Funktionalität, jedoch mit einigen Unterschieden. Wie bereits erwähnt, arbeitet der Bediener && als Kurzschlussauswertungsfunktion. Die Kurzschlussauswertung funktioniert jedoch nicht für &. Das heißt, & bewertet den Wert auf der rechten Seite auch in Situationen, in denen es nicht erforderlich ist, den Wert auf der rechten Seite zu bewerten.
Java-Nachschlagewerke und Websites sagen, dass && schneller ist, weil es keine zusätzliche Bewertung durchführt. Als ich diese Beschreibung las, fragte ich mich. "Da es sich um einen anderen Prozess handelt, ist es wirklich schneller, den Prozess nur auf der rechten Seite zu bestehen?" Also habe ich tatsächlich versucht, den Unterschied in der Verarbeitungsgeschwindigkeit zwischen && und & zu überprüfen.
Test1
long start = System.currentTimeMillis();
boolean flag1 = false;
boolean flag2 = false;
for(long i=0; i<10000000000l; i++) {
if(flag1 && flag2) {
System.out.print("");
}
}
long end = System.currentTimeMillis();
System.out.println("Ausführungszeit" + (end - start) + "ms");
&& wird im bedingten Ausdruck der if-Anweisung verwendet.
Test2
long start = System.currentTimeMillis();
boolean flag1 = false;
boolean flag2 = false;
for(long i=0; i<10000000000l; i++) {
if(flag1 & flag2) {
System.out.println("");
}
}
long end = System.currentTimeMillis();
System.out.println("Ausführungszeit" + (end - start) + "ms");
& Wird im bedingten Ausdruck für if verwendet.
Ich habe die beiden oben genannten Programmtypen ausgeführt und Statistiken zur Ausführungszeit jedes Programms erstellt. Die folgende Tabelle zeigt die Ergebnisse.
Mit Kurzschlussauswertung(&&) | Keine Kurzschlussauswertung(&) | |
---|---|---|
1. Mal | 3546 | 3500 |
Zweites Mal | 3556 | 3595 |
3. Mal | 3586 | 3565 |
4. Mal | 3574 | 3564 |
5. Mal | 3552 | 3636 |
6. Mal | 3570 | 3620 |
7. Mal | 3512 | 3568 |
8. Mal | 3563 | 3597 |
9. Mal | 3560 | 3565 |
10. Mal | 3555 | 3500 |
durchschnittlich | 3557.6 | 3571.0 |
Soweit der Durchschnitt in der Tabelle ersichtlich ist, wird angenommen, dass die Verarbeitungsgeschwindigkeit schneller ist, wenn die Kurzschlussbewertung durchgeführt wird. In diesem Experiment war jedoch die Anzahl der Abtastwerte gering und der Unterschied in der Ausführungszeit zwischen mit und ohne Kurzschlussbewertung gering, so dass die Verarbeitung unter Verwendung von && mit Kurzschlussbewertung schneller ist als mit & ohne Kurzschlussbewertung. Die Gründe sind etwas schwach zu schließen.
In dem Experiment, das ich dieses Mal durchgeführt habe, habe ich das Ergebnis erhalten, dass die Verarbeitung bei Verwendung der Kurzschlussbewertung schneller ist. Derzeit ist es besser, && zu verwenden, wenn das logische Produkt mehrerer boolescher Werte in Java verwendet wird. In anderen Sprachen wie C hat & möglicherweise eine völlig andere Funktion, beide Seiten als Binärzahlen zu verwenden und das logische Produkt für jede Ziffer zu verwenden, sodass beim Wechseln der Sprache Fehler auftreten können. Es wird empfohlen, && zu verwenden, wenn Sie mit & und && in Java das gleiche Ergebnis erzielen können, um zu verhindern, dass es zunimmt.
Recommended Posts