Как проверить равенство строк в clojure без вызова java.lang.String?
Есть ли способ в clojure проверить равенство строк?
то есть мне нужно знать, равно ли их содержимое, а не местоположение.
спасибо.
Ответы
Ответ 1
Равенство в Clojure (функция =
) всегда проверяет значение, а не идентификатор, поэтому две строки =
, если они имеют одинаковое содержимое.
Для большинства типов Java, включая String, Clojure =
отправляется на Java .equals
. String.equals определяется как "представляет одну и ту же последовательность символов".
Если вы хотите проверить личность (эти указатели находятся в одном месте в памяти?), используйте функцию identical?
.
Ответ 2
(= "hello" (str "hel" "lo"))
; => true
JVM имеет пул строк, который содержит не более одной записи на каждое значение, поэтому идентичность и равенство значений являются тем же самым сопоставлением. Существуют способы использования StringBuilder.
и String.
, где это не строго верно, но поскольку функция равенства clojure вызывает .equals
, сравнение значений будет выполняться, если идентичность отличается.