2012-03-06 25 views
11

Dentro de java me pregunto cuál de ellos es más eficiente:dos sentencias IF vs una instrucción AND

if(something) 
    { 
     if(something) 
    } 

o

if((something) &&(something)) 

Me preguntaba lo que los méritos son para ambos en términos de rendimiento . Qué soluciones se prestan mejor a diferentes objetos de datos.

+1

la primera forma en que se ve típicamente en el código escrito por personas que no saben/entender que los cortocircuitos del operador '&&'. He visto más de 15 bloques 'si' en cascada en el código heredado, y los reemplacé rápidamente con la segunda. (Aparte: el 'Y' de VB.NET es uno de esos ejemplos donde no produce un cortocircuito, pero' AndAlso' sí lo hace) – Seph

Respuesta

19

El rendimiento será idéntico. La primera declaración se evaluará y solo si es verdadera se evaluará la segunda.

Esto es simplemente una cuestión de legibilidad. A menos que haya algo que deba hacerse si la primera afirmación es verdadera, independientemente de la segunda, iría con ambas en la misma línea, ya que es más claro que ambas afirmaciones deben ser ciertas para que algo suceda. Tampoco tiene que sangría innecesariamente.

+2

+1: El código de byte en el caso más simple es idéntico –

+0

Creo que dos declaraciones 'if' es mejor para la legibilidad si se verifican algunas condiciones usando múltiples operaciones booleanas y hay múltiples condiciones. Por ejemplo, para comprobar si "num es una potencia de 2" y "el tamaño es positivo", creo que sería más difícil de leer si se escribe (python) "si num> 0 y num & (num-1)) == 0 y tamaño == 0: ... " – Sean

2

En Java, && cortocircuitos. Esto significa que si la primera condición en a && b se evalúa como false, la segunda condición ni siquiera se evalúa.

Por lo tanto, los dos casi con seguridad dan como resultado un código idéntico, y no hay diferencia de rendimiento.

De las dos formas, debe usar lo que resulte en un código más claro.

2

En general son iguales. Si el primero se evalúa como falso, el segundo no se evaluará. En caso de que desee que ocurra algo si el primero es falso, debe usar la instrucción if independiente. De lo contrario, si solo quiere asegurarse de que ambos sean verdaderos y no haga nada si uno de ellos devuelve falso, puede usar la segunda opción.

1

Tenga en cuenta que el operador && en Java es un operador de cortocircuito. Eso significa que si la expresión en el lado izquierdo de && es false, Java no se molestará en evaluar la expresión en el lado derecho, porque el resultado será false, sin importar lo que la expresión del lado derecho evalúe .

Por lo tanto, efectivamente, el rendimiento de estas dos construcciones será el mismo.

Tenga en cuenta que Java también tiene un operador &. Ese no cortocircuita: siempre evaluará las expresiones en ambos lados del &.

0

No sé, pero, por la intuición, creo que una vez compilado en código de bytes no hay diferencia ...