Оператор == быстрее чем equals ()? - PullRequest
0 голосов
/ 23 февраля 2020

Я изучаю метод String intern () и знаю, что intern () помогает мне сравнить объект String с помощью оператора "==" над методом equals (), и некоторые документы приводят это быстрее. Не так ли?

https://dzone.com/articles/string-interning-what-why-and

1 Ответ

4 голосов
/ 23 февраля 2020

TL; DR Не использовать == для сравнения строк.

В частности, в отношении строк, да, == это немного быстрее, чем equals, потому что первое, что делает метод String.equals, это ... сравнение ==, чтобы увидеть, сравнивается ли строка с самой собой. Если это так, equals() медленнее, чем стоимость вызова метода. Если это не так, equals медленнее на эту стоимость плюс стоимость сравнения символов в строках.

Но помните, что прежде чем использовать == для сравнения строк (что является плохой идеей ™), вы должны точно знать, что обе строки интернированы. Комбинация intern() и == на не быстрее, чем equals(). intern() - это относительно дорогая операция, так как она включает поиск эквивалентной строки, уже находящейся в пуле стажеров, что может включать в себя множество equals() вызовов (или их эквивалентов).

Может быть несколько крайне редкие крайние случаи, когда разумно взять на себя intern() стоимость, а затем использовать == для строк, которые, как вы знаете, интернированы. Например, если у вас большой набор строк c, который вы сравниваете друг с другом действительно часто. Но это крайне необычная крайняя ситуация.

Итог: не сравнивайте строки с ==. Не интернируйте строки без необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...