¿Por qué ===
es más rápido que ==
en PHP?¿Por qué es === más rápido que == en PHP?
Respuesta
Porque el operador de igualdad ==
fuerza, o convierte el tipo de datos temporalmente para ver si es igual al otro operando mientras que ===
(operador de identidad) no necesita realizar ninguna conversión y por lo tanto se hace menos trabajo, por lo que Más rápido.
Creo que su opinión es contraria a lo que dice el Manual de PHP. Dicen que $ a == $ b es VERDADERO si $ a es igual a $ b, donde $ a === $ b es VERDADERO si $ a es igual a $ b, y son del mismo tipo. – Bakhtiyor
¿Cómo es lo contrario, entonces? –
Creo que es en realidad que los 2 operandos apuntan a la misma área de memoria para tipos complejos, pero la respuesta de Meder abarca – Basic
Realmente no sé si es significativamente más rápido, pero === en la mayoría de los idiomas es una comparación de tipo directo, mientras que == intentará hacer una coerción de tipo si es necesario/posible para obtener una coincidencia.
Primero, === comprueba si los dos argumentos son los mismos tipo - por lo que el número 1 y la cadena '1' fallan en la verificación de tipo antes de que se realicen realmente las comparaciones. Por otro lado, == no comprueba primero el tipo y continúa y convierte ambos argumentos en el mismo tipo y luego realiza la comparación.
Por lo tanto, es más rápido === a la comprobación de una condición de fallo de
Supongo que '==' también verifica primero el tipo para ver si es necesario realizar alguna conversión de tipo.El hecho de que '===' no haga ninguna conversión en el siguiente paso es lo que lo hace más rápido. – deceze
Debido ===
doesn't need to coerce the operands to be of the same type antes de compararlos.
Dudo que la diferencia en la velocidad sea muy buena. En circunstancias normales, debe usar el operador que tenga más sentido.
===
no realiza encasillamiento, por lo 0 == '0'
evalúa a true
, pero 0 === '0'
- a false
.
El == incurre en una sobrecarga mayor de conversión de tipo antes de la comparación. === primero verifica el tipo, luego continúa sin tener que hacer ninguna conversión de tipo.
En conclusión === es más rápido porque no convierte el tipo de datos para ver si dos variables tienen el mismo valor, pero cuando necesita ver si dos variables tienen el mismo valor, usará == si no importa qué tipo son variables, o === si también es importante el tipo de variables.
hay dos cosas a tener en cuenta:
Si los tipos de operandos son diferentes entonces
==
y===
producen resultados diferentes . En ese caso, la velocidad de los operadores no importa; lo que importa es cuál produce el resultado deseado.Si los tipos de operandos son iguales, entonces se puede utilizar cualquiera
==
o===
ya que ambos producirá mismos resultados. En ese caso, la velocidad de ambos operadores es casi idéntica. Esto se debe a que ninguno de los operadores realiza la conversión de tipo.
I comparó la velocidad de:
$a == $b
vs$a === $b
- donde
$a
y$b
fueron enteros aleatorios [1, 100] - las dos variables fueron generados y compararon un millón de veces
- las pruebas se ejecutaron 10 veces
Y aquí están los resultados:
$a == $b $a === $b
--------- ---------
0.765770 0.762020
0.753041 0.825965
0.770631 0.783696
0.787824 0.781129
0.757506 0.796142
0.773537 0.796734
0.768171 0.767894
0.747850 0.777244
0.836462 0.826406
0.759361 0.773971
--------- ---------
0.772015 0.789120
se puede ver que la velocidad es casi idéntica.
me pregunto qué pasaría si haces miles de millones de iteraciones en una máquina que no está haciendo otra cosa y solo sacas el promedio. parece que hay mucho ruido aquí. ;) –
Llegué a la misma conclusión: no se podría cuestionar ninguna diferencia si se sabe que los operandos son del mismo tipo. Otros escenarios no hacen sentido. Casi todas las otras respuestas son simplemente incorrectas. –
Si los resultados de las pruebas son correctas, entonces debe ser un tema compilador,
El procesador hará lo que se le dice que hacer en un ciclo de reloj
Si tiene menos que ver entonces será ser más rápido que hacer
adición:
Ah, bueno en realidad, si el compilador ya ha creado un montón de código de máquina para ser procesados, a continuación, si ya ha añadido infinidad de cosas para hacer frente a qué tipo de necesidades de datos comparando, entonces el remo El valor de un IF "menor" no cambiará las velocidades en absoluto.
Si alguien todavía lee esto, entonces estoy interesado en más discusión.
Phil
- 1. ¿Por qué \% (\) es más rápido que \ (\) en Vim?
- 2. ¿Por qué file_get_contents es más rápido que memcache_get?
- 3. ¿Es + = más rápido que - =?
- 4. ¿Por qué String.IsNullOrEmpty es más rápido que String.Length?
- 5. ¿Por qué i = i + 1 es más rápido que i ++?
- 6. ¿Por qué es Select 1 más rápido que Select count (*)?
- 7. ¿Por qué MSMQ es más rápido que WCF QueueService?
- 8. Por qué unir es más rápido que la concatenación normal
- 9. Por qué Array.reverse_each es más rápido que Array.reverse.each
- 10. ¿Cuál es más rápido y por qué?
- 11. ¿Es Quercus (Java) más rápido que PHP nativo?
- 12. ¿Es `extender` más rápido que` + = `?
- 13. IPC más rápido en PHP
- 14. ¿Qué es más rápido EN O?
- 15. Preincremento más rápido que poscreción en C++ - ¿cierto? Si es así, ¿por qué es?
- 16. cuando es Java más rápido que C++ (o cuando JIT es más rápido que precompilado)?
- 17. que es más rápido? Declaración o PreparedStatement
- 18. ¿Por qué compila C# mucho más rápido que C++?
- 19. ¿C++/CLI es más rápido que C#
- 20. ¿Por qué es esta consulta basada gama mucho más rápido
- 21. ¿Por qué mi string.indexof (char) es más rápido?
- 22. ¿Por qué este código de ensamblaje es más rápido?
- 23. ¿Por qué es más rápido insertar y unir tablas #temp?
- 24. Buffer vs String speed: ¿Por qué String es más rápido?
- 25. ¿Por qué el mapa sería mucho más rápido que unordered_map?
- 26. Ciclismo a través de SortedList: ¿por qué es más rápido?
- 27. ¿Por qué no es más rápido usando colecciones paralelas?
- 28. ¿Por qué es más lento que contiene?
- 29. ¿SQLite es realmente más rápido que MySQL?
- 30. ¿Qué es más rápido, INSTR o LIKE?
Es más rápido, pero ¿es * significativamente * más rápido? – Piskvor
Por favor, no lea sobre lo que es más rápido en php. Lea sobre cómo obtener datos interesantes en una consulta de SQL simple sin abusar de JOIN. –
A quien podría interesarle el mismo tema '=== vs ==', pero en JAVASCRIPT, puede leer aquí: http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter- que-igual-operador-yo-uso –