Почему === быстрее, чем == в PHP?

Почему === быстрее, чем == в PHP?

    Поскольку оператор равенства == принудительно или временно преобразует тип данных, чтобы увидеть, равен ли он другому операнду, тогда как === (оператор идентификации) не нужно делать никаких преобразований, и, следовательно, меньше работы выполняется, что делает его более быстрым ,

    === не выполняет typecasting, поэтому 0 == '0' оценивается как true , но 0 === '0'false .

    Во-первых, === проверяет, являются ли два аргумента одного и того же типа, поэтому число 1 и строка «1» не выполняются при проверке типа перед выполнением любых сравнений. С другой стороны, == не проверяет тип первым и идет вперед и преобразует оба аргумента в один и тот же тип, а затем выполняет сравнение.

    Поэтому === быстрее проверяет условие сбоя

    Есть две вещи, которые следует учитывать:

    1. Если типы операндов различны, то == и === производят разные результаты . В этом случае скорость операторов не имеет значения; имеет значение то, что дает желаемый результат.

    2. Если типы операндов одинаковы, вы можете использовать либо == или === как оба будут давать одинаковые результаты . В этом случае скорость обоих операторов почти одинакова. Это связано с тем, что никакое преобразование типа не выполняется ни одним из операторов.

    Я сравнил скорость:

    • $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 

    Вы можете видеть, что скорость почти идентична.

    Я действительно не знаю, если это значительно быстрее, но === в большинстве языков это сравнение прямого типа, а == будет пытаться сделать принуждение типа, если необходимо / возможно, получить совпадение.

    == По сравнению с предыдущим значением ==, возникает большая ошибка преобразования типов. === сначала проверяет тип, затем переходит без необходимости преобразования любого типа.

    Потому что === не нужно принуждать операнды к тому же типу, прежде чем сравнивать их.

    Я сомневаюсь, что разница в скорости очень много. При нормальных обстоятельствах вы должны использовать любой оператор, имеющий больше смысла.

    В заключение === быстрее, потому что не преобразует тип данных, чтобы увидеть, имеют ли две переменные одинаковое значение, но когда вам нужно увидеть, имеют ли две переменные одинаковое значение, вы будете использовать ==, если не указано, какие типы являются переменными , или === если важно также тип переменных.

    Если результаты теста верны, то это должна быть проблема с компилятором,

    Процессор будет делать все, что ему говорят, в такт

    Если это будет меньше, то это будет быстрее сделать

    Дополнение:

    Хорошо, действительно, если компилятор уже создал множество машинного кода для обработки, то, если он уже добавил множество элементов, чтобы справиться с тем, какой тип данных нужно сравнивать, то удаление одного «младшего» IF не будет сильно изменять скорости вообще.

    Если кто-то еще это читает, то мне интересно в более широком обсуждении.

    Фил