строки Java кэшируют свои хэш-коды - так что если хэш-коды равны, строки очень вероятно, что будет равным. Полная проверка равенства может занять гораздо больше времени, если строки имеют одинаковую длину и отличаются только от самого конца. (. Реализация equals
в String
сначала проверяет длины, прежде чем он смотрит на фактических кодовых единицах)
С другой стороны, это требует хэш-код должен быть вычислен - если он еще не был вычислен, что будет O (n) в длине строки, тогда как две строки неравной длины могут быть сравнены для равенства очень быстро.
Так если вы знаете, что строки уже хэшируются и вы ожидаете там будет много строк с одинаковой длиной , это оптимизация - в противном случае это может сделать вещи медленнее. Однако я бы не использовал его в коде общего назначения, и я бы добавил комментарий, объясняющий причину этого.
И вы уже не знаете, что хэш-коды равны через какой-то другой механизм, в соответствии с комментарием SUPERCAT в поле ниже - я бы сказал, что это угол случай на угловом случае, хотя ,
это быстрее, чем что? – Antoniossss
, чем сказать if (s1.equals (s2)) –
Быстрее ли сравнивать отпечатки пальцев или ДНК двух людей? – Mehrdad