La clase Java es igual a
equals() es un método utilizado para comparar dos objetos para la igualdad. La implementación por defecto del método equals() en la clase Object devuelve true si y sólo si ambas referencias apuntan a la misma instancia. Por tanto, se comporta igual que la comparación por ==.
Observe que el método hashCode() también ha sido sobrescrito. El contrato para ese método establece que cuando dos objetos son iguales, sus valores hash también deben ser iguales. Por eso casi siempre hay que sobrescribir hashCode() y equals() juntos.
Java 1.7 introdujo la clase java.util.Objects que proporciona un método de conveniencia, equals, que compara dos referencias potencialmente nulas, por lo que se puede utilizar para simplificar las implementaciones del método equals.
Dado que el método equals puede ejecutarse contra cualquier objeto, una de las primeras cosas que suele hacer el método (después de comprobar si es nulo) es comprobar si la clase del objeto que se compara coincide con la clase actual.
Esto se hace típicamente como en el caso anterior, comparando los objetos de la clase. Sin embargo, esto puede fallar en algunos casos especiales que pueden no ser obvios. Por ejemplo, algunos frameworks generan proxies dinámicos de clases y estos proxies dinámicos son en realidad una clase diferente. Aquí hay un ejemplo usando JPA.
Equivale a un objeto java
En el punto 8 de Effective Java1, Josh Bloch describe la dificultad de preservar el contrato equals al subclasificar como un “problema fundamental de las relaciones de equivalencia en los lenguajes orientados a objetos”. Bloch escribe
El capítulo 28 de Programming in Scala muestra un enfoque que permite que las subclases extiendan una clase instanciable, añadan un componente de valor y, sin embargo, preserven el contrato de igualdad. Aunque en el libro la técnica se describe en el contexto de la definición de clases Scala, también es aplicable a las clases definidas en Java. En este artículo, presentamos la técnica utilizando el texto adaptado de la sección pertinente de Programming in Scala, pero con los ejemplos de código traducidos de Scala a Java.
La clase java.lang.Object define un método equals, que las subclases pueden anular. Por desgracia, resulta que escribir un método de igualdad correcto es sorprendentemente difícil en los lenguajes orientados a objetos. De hecho, después de estudiar una gran cantidad de código Java, los autores de un artículo de 2007 llegaron a la conclusión de que casi todas las implementaciones de los métodos de igualdad son defectuosas.2 Esto es problemático, porque la igualdad está en la base de muchas otras cosas. Por ejemplo, un método de igualdad defectuoso para un tipo
La cadena de Java es igual a no
La implementación por defecto de la clase equals() proporcionada por java.lang.Object compara la ubicación de memoria y sólo devuelve true si dos variables de referencia apuntan a la misma ubicación de memoria, es decir, esencialmente son el mismo objeto.
Java recomienda anular los métodos equals y hashCode si la igualdad va a ser definida de manera lógica o a través de alguna lógica de negocio y muchas clases en la biblioteca estándar de Java lo anulan, por ejemplo, String anula equals, cuya implementación del método equals() devuelve true si el contenido de dos objetos String es exactamente el mismo. La clase envolvente Integer anula equal para realizar una comparación numérica, etc.
Dado que HashMap y Hashtable en Java dependen del método equals() y hashCode() para comparar claves y valores, Java proporciona las siguientes reglas para anular el método equals Java. Según la siguiente regla el método equals en Java debe ser
4) Consistente: múltiples invocaciones del método equals() deben devolver el mismo valor hasta que se modifique alguna de las propiedades. Así, si dos objetos son iguales en Java, seguirán siendo iguales hasta que se modifique alguna de sus propiedades.
No es igual a java
El String es una clase especial en Java. Usamos String regularmente en los programas Java, por lo que comparar dos cadenas es una práctica común en Java. En este artículo, he tratado de responder a las preguntas más comunes sobre la cadena, como: “¿Cómo puedo comparar cadenas en Java?”
El método equals() de la clase String toma otra cadena como parámetro y la compara con la cadena especificada. Devuelve verdadero si -y sólo si- la cadena parámetro no es nula y contiene los mismos caracteres que la cadena especificada.
Cuando asignamos un valor de cadena a la variable string, la JVM comprobará si la cadena con el mismo valor ya está presente en el pool de cadenas o no. Si no está presente en el pool de cadenas, se añadirá al pool de constantes y se devolverá la referencia a ese objeto cadena.
Devuelve un entero negativo si la cadena del argumento es lexicográficamente mayor que la cadena especificada, es decir, si la cadena del argumento es posterior a la cadena especificada. (cadena del argumento > cadena especificada )
Devuelve un entero positivo si la cadena de argumentos es lexicográficamente menor que la cadena especificada, es decir, si la cadena de argumentos precede a la cadena especificada. (argumento Cadena < Cadena especificada )