En Programming in Scala los autores escriben que la función ==
de Scala compara igualdad de valores en lugar de igualdad de referencia.¿Por qué la función == de Array no es verdadera para Array (1,2) == Array (1,2)?
Esto funciona como se espera en las listas:
scala> List(1,2) == List(1,2)
res0: Boolean = true
Sin embargo, no funciona en arrays:
scala> Array(1,2) == Array(1,2)
res1: Boolean = false
Los autores recomiendan utilizar la función sameElements lugar:
scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true
Como explicación escriben:
Si bien esto puede parecer una incoherencia, alentar una prueba explícita de la igualdad de dos estructuras de datos mutables es un enfoque conservador por parte de los diseñadores del lenguaje. A la larga, debería salvarte de resultados inesperados en tus condicionales.
¿Qué significa esto? ¿De qué tipo de resultados inesperados están hablando? ¿Qué más podría esperar de una comparación de matriz que devolver verdadero si las matrices contienen los mismos elementos en la misma posición? ¿Por qué funciona igual en
List
pero no enArray
?¿Cómo puedo hacer que funcione la función igual en las matrices?
También he notado esta explicación en este libro. No es correcto, mira mi propia respuesta a continuación. Aparte de este error, el libro es muy bueno. –
Se podría decir brevemente lo que está sucediendo ya que, "Java define la igualdad de valores en las matrices como igualdad de referencia, no igualdad de elemento por elemento". –
posible duplicado de [Comportamiento extraño del tipo de matriz] (http://stackoverflow.com/questions/3213368/strange-behaviour-of-the-array-type) – Suma