Почему ===
быстрее, чем ==
в PHP?
Почему === быстрее, чем == в PHP?
Ответ 1
Поскольку оператор равенства ==
принуждает или временно преобразует тип данных, чтобы увидеть, совпадает ли он с другим операндом, тогда как ===
(оператор идентификации) не нуждается в каком-либо преобразовании, и, следовательно, делая его быстрее.
Ответ 2
===
не выполняет typecasting, поэтому 0 == '0'
оценивается как true
, но 0 === '0'
- до false
.
Ответ 3
Во-первых, === проверяет, являются ли два аргумента одного и того же типа, поэтому число 1 и строка '1' не выполняются при проверке типа перед выполнением любых сравнений. С другой стороны, == не проверяет тип сначала и идет вперед и преобразует оба аргумента в один и тот же тип, а затем делает сравнение.
Следовательно, === быстрее проверяет условие сбоя
Ответ 4
Можно рассмотреть две вещи:
-
Если типы операндов различаются, то
==
и===
производят разные результаты. В этом случае скорость операторов не имеет значения; важно то, что человек производит желаемый результат. -
Если типы операндов одинаковы, вы можете использовать либо
==
, либо===
, так как оба будут производить те же результаты. В этом случае скорость обоих операторов почти одинакова. Это происходит потому, что никакие преобразования типов не выполняются ни одним из операторов.
Я сравнил скорость:
-
$a == $b
vs$a === $b
- где
$a
и$b
были случайными целыми числами [1, 100] - две переменные были сгенерированы и сравнены миллион раз
- тесты выполнялись 10 раз
И вот результаты:
$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
Вы можете видеть, что скорость почти идентична.
Ответ 5
Я действительно не знаю, если это значительно быстрее, но === на большинстве языков это сравнение прямого типа, а == будет пытаться сделать принуждение типа, если необходимо/возможно, получить соответствие.
Ответ 6
Поскольку ===
не нужно принуждать операнды к одному типу, прежде чем сравнивать их.
Я сомневаюсь, что разница в скорости очень много. При нормальных обстоятельствах вы должны использовать любой оператор, имеющий смысл.
Ответ 7
=== === ================================================================== === сначала проверяет тип, затем переходит без необходимости преобразования любого типа.
Ответ 8
В заключение === быстрее, потому что не преобразует тип данных, чтобы увидеть, имеют ли две переменные одинаковое значение, но когда вам нужно увидеть, имеют ли две переменные одинаковое значение, вы будете использовать ==, если не считать, что type являются переменными или === если важно также тип переменных.
Ответ 9
Если результаты теста верны, то это должна быть проблема с компилятором,
Процессор будет делать то, что, как ему говорят, делает в такт
Если у него меньше времени, то это будет быстрее сделать
Дополнение:
Хорошо, действительно, если компилятор уже создал множество машинного кода для обработки, то, если он уже добавил циллионы вещей, чтобы справиться с тем, какой тип данных нужно сравнивать, тогда удаление одного "младшего" IF не будет меняются скорости вообще.
Если кто-то все еще читает это, тогда мне интересно в более подробном обсуждении.
Фил