Почему === быстрее, чем == в 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 не будет меняются скорости вообще.

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

Фил