compareTo () по сравнению с равняется ()

Почему был бы он "ускорять вещи"? Что точно должны делать аппаратные средства? Это все еще должно пересечь все ссылки между объектами, что означает, что это должно пробежать большой блок данных в оперативной памяти, которая является главной причиной, почему это занимает время. Что Вы получили бы этим? То, какая конкретная операция - это, что Вы думаете, могло быть сделано быстрее с поддержкой оборудования? Большая часть работы в сборщике "мусора" просто следует за указателями/ссылками и иногда копирует живые объекты от одной "кучи" до другого. как это отличается от инструкций, которые уже поддерживает ЦП?

После этих слов почему Вы думаете мы потребность более быстрая сборка "мусора"? Современный GC может уже быть очень быстрым и эффективным, до такой степени, когда это - в основном решенная проблема.

113
задан Micha Wiedenmann 27 October 2019 в 07:18
поделиться

6 ответов

Разница в том, что «foo» .equals ((String) null) возвращает false, а «foo» .compareTo ((String) null) == 0 вызывает исключение NullPointerException. Поэтому они не всегда взаимозаменяемы даже для струнных.

100
ответ дан 24 November 2019 в 02:42
поделиться

Похоже, что оба метода в значительной степени делают одно и то же, но метод compareTo () принимает String, а не Object, и добавляет некоторые дополнительные функции поверх обычного equals () метод. Если все, что вас волнует, - это равенство, тогда метод equals () - лучший выбор просто потому, что он имеет больше смысла для следующего программиста, который взглянет на ваш код. Разница во времени между двумя разными функциями не должна иметь значения, если вы не перебираете огромное количество элементов. CompareTo () действительно полезен, когда вам нужно знать порядок строк в коллекции или когда вам нужно знать разницу в длине между строками, которые начинаются с одной и той же последовательности символов.

источник: http: //java.sun.com/javase/6/docs/api/java/lang/String. html

5
ответ дан 24 November 2019 в 02:42
поделиться

Два основных отличия заключаются в том, что:

  1. equals принимает любой объект в качестве параметра, но compareTo принимает только строки.
  2. equals только сообщает вам, равны они или нет, но compareTo дает информацию о лексикографическом сравнении строк.

Я взглянул на код класса String , и алгоритм в compareTo и equals выглядит в основном одинаково. Я считаю, что его мнение было всего лишь вопросом вкуса, и я согласен с вами - если все, что вам нужно знать, это равенство строк, а не то, какая из них идет первой лексикографически, то я бы использовал равняется .

28
ответ дан 24 November 2019 в 02:42
поделиться

compareTo должен выполнить больше работы, если строки имеют разную длину. equals может просто вернуть false, а compareTo всегда должен проверять достаточное количество символов, чтобы определить порядок сортировки.

17
ответ дан 24 November 2019 в 02:42
поделиться

При сравнении на равенство вы должны использовать equals () , потому что он ясно выражает ваше намерение.

compareTo () имеет дополнительный недостаток что он работает только с объектами, реализующими интерфейс Comparable .

Это применимо в целом, а не только для строк.

26
ответ дан 24 November 2019 в 02:42
поделиться

compareTo () применяется не только к строкам, но и к любому другому объекту, потому что compareTo принимает общий аргумент T . String - это один из классов, в которых реализован метод compareTo () путем реализации интерфейса Comparable . (compareTo () - это метод для сопоставимого интерфейса). Таким образом, любой класс может свободно реализовать интерфейс Comparable.

Но compareTo () дает упорядочение объектов , обычно используемое при сортировке объектов в порядке возрастания или убывания, тогда как equals () будет говорить только о равенстве ] и скажите, равны они или нет.

10
ответ дан 24 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: