Почему === быстрее, чем == в PHP?
Почему === быстрее, чем == в PHP?
Ответ 1
Поскольку оператор равенства == принуждает или временно преобразует тип данных, чтобы увидеть, совпадает ли он с другим операндом, тогда как === (оператор идентификации) не нуждается в каком-либо преобразовании, и, следовательно, делая его быстрее.
Ответ 2
=== не выполняет typecasting, поэтому 0 == '0' оценивается как true, но 0 === '0' - до false.
Ответ 3
Во-первых, === проверяет, являются ли два аргумента одного и того же типа, поэтому число 1 и строка '1' не выполняются при проверке типа перед выполнением любых сравнений. С другой стороны, == не проверяет тип сначала и идет вперед и преобразует оба аргумента в один и тот же тип, а затем делает сравнение.
Следовательно, === быстрее проверяет условие сбоя
Ответ 4
Можно рассмотреть две вещи:
-
Если типы операндов различаются, то
==и===производят разные результаты. В этом случае скорость операторов не имеет значения; важно то, что человек производит желаемый результат. -
Если типы операндов одинаковы, вы можете использовать либо
==, либо===, так как оба будут производить те же результаты. В этом случае скорость обоих операторов почти одинакова. Это происходит потому, что никакие преобразования типов не выполняются ни одним из операторов.
Я сравнил скорость:
-
$a == $bvs$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 не будет меняются скорости вообще.
Если кто-то все еще читает это, тогда мне интересно в более подробном обсуждении.
Фил