64 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Checking for Equality | ||
|  | localeTitle: 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). | ||
|  | 
 | ||
|  | ```java | ||
|  | 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. | ||
|  | 
 | ||
|  | ```java | ||
|  | 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` : | ||
|  | 
 | ||
|  | ```java | ||
|  | 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. |