++: не кажется правильным ассоциативным?

В Java, когда оператор «==» используется для сравнения двух объектов, он проверяет, ссылаются ли объекты на одно и то же место в памяти. Другими словами, он проверяет, являются ли имена двух объектов в основном ссылками на одно и то же место в памяти.

Класс Java String фактически переопределяет реализацию equals () по умолчанию в классе Object и переопределяет этот метод, чтобы он проверял только значения строк, а не их местоположения в памяти. Это означает, что если вы вызываете метод equals () для сравнения двух объектов String, то, пока действительная последовательность символов равна, оба объекта считаются равными.

Оператор == проверяет, являются ли две строки точно одним и тем же объектом.

Метод .equals() проверяет, имеют ли две строки одно и то же значение.

0
задан Andrey Tyukin 10 March 2019 в 02:24
поделиться

1 ответ

Очень простой эксперимент:

case class A(s: String) { def ++:(a: A) = A(s"(${a.s} + ${s})") }
A("x") ++: A("y") ++: A("z")

дает:

A((x + (y + z)))

, так что это x + (y + z), а не (x + y) + z. Таким образом, ++: является правоассоциативным, как рекламируется.

Обратите внимание, что это ${a.s} + ${s}, а не ${s} + ${a.s}. В случае Queue это, вероятно, аналогично, что-то вроде:

def ++:(left: Queue[A]): Queue[A] = left ++ this

, поэтому порядок элементов появляется «как и должно быть», когда вы пишете q0 ++: q1, который десугарсирует в q1.++:(q0), а затем расширяется в q0 ++ q1.

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

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