Это очень умная оптимизация, которая позволяет switch
выполнять свою работу во времени, практически не зависящей от количества строк в блоке case
оператора.
Эта оптимизация основанапри наблюдении, что хеш-коды одинаковых строк должны быть одинаковыми.Вместо того, чтобы проверять строки на равенство один за другим, компилятор вычисляет хеш целевой строки один раз и выполняет поиск на основе таблиц в O (1).Это приводит компилятор к желаемому случаю, и в этот момент компилятор должен проверить, что строки на самом деле равны.
Обратите внимание, что бывают редкие ситуации, когда несколько строк поиска имеют одинаковый хэш-код,В таких ситуациях сгенерированный оператор case
будет содержать несколько if
для выбора среди строк с одинаковыми хеш-кодами.
В целом, это поведение имитирует поведение словарей на основе хеш-функции: хеш-код определяет case
(эквивалент хеша) и серия if
внутри определяет, есть ли совпадение.Это приводит к повышению производительности, поскольку позволяет компилятору пропускать ненужные проверки.