2016-04-10 14 views
0

Ich bekomme die gleiche Ausgabe: a | b = falsch a || b = falsch a | b = true a || b = wahr a | b = true a || b = wahr a | b = true a || wahr b =Was ist der Unterschied zwischen logischem ODER und OR-Kurzschluss?

What is the difference between these two operators ? 

boolean a = false; 
boolean b = false; 

System.out.println("a | b = " + (a|b)); 
System.out.println("a || b = " + (a||b)); 

a = false; 
b = true; 
System.out.println("a | b = " + (a|b)); 
System.out.println("a || b = " + (a||b)); 

a = true; 
b = false; 
System.out.println("a | b = " + (a|b)); 
System.out.println("a || b = " + (a||b)); 

a = true; 
b = true; 
System.out.println("a | b = " + (a|b)); 
System.out.println("a || b = " + (a||b)); 

Antwort

1

Der Unterschied ist, dass der Kurzschluss Bediener nicht den zweiten Operanden bewerten, ob der erste Operand true ist, die die logische oder ohne Kurzschluss immer beiden Operanden auswertet.

Sie keinen Unterschied in Ihrem einfachen Test sehen würde, da beide die gleiche Leistung keine Ausnahme davon aus geworfen geben sollte, aber wenn Sie so etwas wie dies versuchen:

String s = null; 
System.out.println("a || b = " + s==null || s.length() == 0); 
System.out.println("a | b = " + s==null | s.length() == 0); 

Der erste Operator wird Ihnen wahr, während der zweite Operator Ihnen NullPointerException gibt, da nur der Operator | versuchen wird, s.length() == 0 auszuwerten.