freeCodeCamp/guide/spanish/java/equality/index.md

3.4 KiB

title localeTitle
Checking for Equality Comprobando la igualdad

Comprobando la igualdad

En Java, hay dos formas de verificar si dos variables son "iguales": == y .equals() . Sin embargo, estos dos métodos no funcionan de la misma manera.

El operador ==

La operación de igualdad básica en Java, == como en var1 == var2 , verifica si var1 y var2 apuntan a la misma referencia de objeto . Es decir, si var1 es la misma instancia de una clase en la memoria que var2 , entonces var1 == var2 es verdadero.

Sin embargo, si var1 y var2 se crearon como dos instancias separadas de una clase (es decir, con la new palabra clave), var1 == var2 será falso. Incluso si ambos objetos contienen exactamente las mismas propiedades y valores, la comparación == no pasaría porque no apuntan al mismo objeto en la memoria.

Para tipos de variables primitivas, como int y double , el operador == siempre se puede usar para verificar la igualdad, ya que sus valores se almacenan directamente con la variable (en lugar de como una referencia a otra ranura en la memoria).

int var1 = 1; 
 int var2 = 1; 
 System.out.println(var1 == var2) // true 
 
 MyObject obj1 = new MyObject(); 
 MyObject obj2 = obj1; 
 MyObject obj3 = new MyObject(); 
 
 System.out.println(obj1 == obj2) // true 
 System.out.println(obj1 == obj3) // false 
 System.out.println(obj2 == obj3) // false 

El .equals()

La clase de Object incorporada en Java, que todas las demás clases se extienden automáticamente, contiene una serie de métodos incorporados útiles. Uno de estos métodos es equals() , que toma otro objeto como argumento y devuelve si los dos objetos deben considerarse "iguales" según la lógica relevante para esa clase.

La clase 'String' es uno de los ejemplos más comunes de una clase que anula el método 'equals ()'. Al comparar dos 'Cadenas para la igualdad, debe usar el método' igual a () ', ya que' == 'no funcionará como espera.

String s1 = "Bob"; 
 String s2 = "ob"; 
 s2 = "B" + s2; //s2 now is also "Bob" 
 System.out.println(s1 == s2); //false 
 System.out.println(s1.equals(s2)); //true 

Cuando crea una nueva clase en Java, a menudo querrá anular el método equals() para proporcionar una manera más significativa de comparar dos objetos de la misma clase. Cómo se implementa este método depende completamente del criterio del desarrollador.

Por ejemplo, puede decidir que dos Person deben considerarse "iguales" si su name y fecha de dateOfBirth son iguales. Esta lógica se implementaría en el método equals() su clase Person :

public class Person { 
    public String name; 
    public Date dateOfBirth; 
 
    public boolean equals(Person person) { 
        return this.name.equals(person.name) && this.dateOfBirth.equals(person.dateOfBirth); 
    } 
 } 

La mayoría de las clases integradas en Java, así como las proporcionadas por bibliotecas populares, implementarán el método equals() manera significativa.

Por ejemplo, la interfaz java.util.Set especifica que el método equals() un Set devolverá verdadero si "el objeto especificado también es un conjunto, los dos conjuntos tienen el mismo tamaño, y cada miembro del conjunto especificado está contenido en este conjunto ".

Sin embargo, si una clase no anula la implementación predeterminada de equals() , se aplicará la implementación predeterminada, que simplemente utiliza el operador == para comparar los dos objetos.