En cortocircuito es donde se deja de evaluar una expresión tan pronto como se determina su resultado. Así, por ejemplo:
if (a == b || c == d || e == f) {
// Do something
}
Si a == b
es cierto, entonces c == d
y e == f
son no se evaluaron en absoluto, porque el resultado de la expresión ya ha sido determinada. si a == b
es falso, entonces se evalúa c == d
; si es verdadero, entonces e == f
nunca se evalúa. Esto puede no parecer para hacer alguna diferencia, pero tenga en cuenta:
if (foo() || bar() || baz()) {
// Do something
}
If foo()
vuelve verdad, entonces bar
y baz
están nunca llamó, porque el resultado de la expresión ya ha sido determinada. Por lo tanto, si bar
o baz
tiene algún otro efecto que simplemente devolver algo (un efecto secundario ), esos efectos nunca ocurren.
Un gran ejemplo de un cortocircuito se relaciona con referencias a objetos:
if (a != null && a.getFoo() != 42) {
// Do something
}
a.getFoo()
normalmente lanzar una NullPointerException
si a
eran null
, pero debido a la expresión cortocircuitos, si a != null
es false
, la parte a.getFoo()
nunca sucede, entonces no obtenemos una excepción.
Tenga en cuenta que no todas las expresiones están en cortocircuito. Los operadores ||
y &&
están en cortocircuito, pero |
y &
no son ni son *
ni /
; de hecho, la mayoría de los operadores no lo son.
http://en.wikipedia.org/wiki/Short-circuit_evaluation – Matt