Почему был бы он "ускорять вещи"? Что точно должны делать аппаратные средства? Это все еще должно пересечь все ссылки между объектами, что означает, что это должно пробежать большой блок данных в оперативной памяти, которая является главной причиной, почему это занимает время. Что Вы получили бы этим? То, какая конкретная операция - это, что Вы думаете, могло быть сделано быстрее с поддержкой оборудования? Большая часть работы в сборщике "мусора" просто следует за указателями/ссылками и иногда копирует живые объекты от одной "кучи" до другого. как это отличается от инструкций, которые уже поддерживает ЦП?
После этих слов почему Вы думаете мы потребность более быстрая сборка "мусора"? Современный GC может уже быть очень быстрым и эффективным, до такой степени, когда это - в основном решенная проблема.
Разница в том, что «foo» .equals ((String) null)
возвращает false, а «foo» .compareTo ((String) null) == 0
вызывает исключение NullPointerException. Поэтому они не всегда взаимозаменяемы даже для струнных.
Похоже, что оба метода в значительной степени делают одно и то же, но метод compareTo () принимает String, а не Object, и добавляет некоторые дополнительные функции поверх обычного equals () метод. Если все, что вас волнует, - это равенство, тогда метод equals () - лучший выбор просто потому, что он имеет больше смысла для следующего программиста, который взглянет на ваш код. Разница во времени между двумя разными функциями не должна иметь значения, если вы не перебираете огромное количество элементов. CompareTo () действительно полезен, когда вам нужно знать порядок строк в коллекции или когда вам нужно знать разницу в длине между строками, которые начинаются с одной и той же последовательности символов.
источник: http: //java.sun.com/javase/6/docs/api/java/lang/String. html
Два основных отличия заключаются в том, что:
equals
принимает любой объект в качестве параметра, но compareTo
принимает только строки. equals
только сообщает вам, равны они или нет, но compareTo
дает информацию о лексикографическом сравнении строк. Я взглянул на код класса String , и алгоритм в compareTo и equals выглядит в основном одинаково. Я считаю, что его мнение было всего лишь вопросом вкуса, и я согласен с вами - если все, что вам нужно знать, это равенство строк, а не то, какая из них идет первой лексикографически, то я бы использовал равняется
.
compareTo
должен выполнить больше работы, если строки имеют разную длину. equals
может просто вернуть false, а compareTo
всегда должен проверять достаточное количество символов, чтобы определить порядок сортировки.
При сравнении на равенство вы должны использовать equals ()
, потому что он ясно выражает ваше намерение.
compareTo ()
имеет дополнительный недостаток что он работает только с объектами, реализующими интерфейс Comparable
.
Это применимо в целом, а не только для строк.
compareTo ()
применяется не только к строкам, но и к любому другому объекту, потому что compareTo
принимает общий аргумент T
. String - это один из классов, в которых реализован метод compareTo ()
путем реализации интерфейса Comparable
. (compareTo () - это метод для сопоставимого интерфейса). Таким образом, любой класс может свободно реализовать интерфейс Comparable.
Но compareTo ()
дает упорядочение объектов , обычно используемое при сортировке объектов в порядке возрастания или убывания, тогда как equals ()
будет говорить только о равенстве ] и скажите, равны они или нет.