¿Qué significa igual?
(La función == se adjunta aquí primero y se describirá más adelante. Debido a que == está estrechamente relacionada con el método equals(), tendré mis propias opiniones más adelante.
= = Tiene diferentes funciones al comparar referencias y comparar tipos de datos básicos:
Al comparar tipos de datos básicos, si los dos valores son iguales, el resultado es verdadero.
Al comparar referencias, si la referencia apunta al mismo objeto en la memoria, el resultado es verdadero)
Booleano público es igual (objeto objeto)
La regla de comparación es: cuando el objeto al que hace referencia el parámetro obj es el mismo que el objeto actual, devuelve verdadero; de lo contrario, devuelve falso.
Pez público {
Peso int privado;
Color de cadena privada
Pez público (peso int, color de cadena) {
este.color = color
este.peso =peso;
}
public int getWeight() {
Peso de retorno;
}
Public void setWeight(int peso) {
this.weight = peso;
}
Cadena pública getColor() {
Color de retorno;
}
SetColor vacío público (color de cadena){
this.color = color
}
}
Clase pública EqualsTest {
Pública estática vacía principal (String[] args ) {
pez f1 = pez nuevo (1, "azul");
pez f2 = pez nuevo (1, "azul"); >
sistema . println(f 1 == F2);
sistema . println(f 1 . igual(F2)); >
p>
}
—————————————————————————————— ——— ——————————————————————————————————————————— ——————— ——————————————————————————————————————— ——————————— ———————————————————————————————
Incorrecto
Incorrecto
Por lo tanto, la intención original del método equals() es determinar si las referencias de dos objetos son las mismas.
2. Algunas clases en la clase JDK cubren el método igual () de la clase de objeto. La regla de comparación es: si los dos objetos tienen el mismo tipo y contenido, devuelve verdadero. Estas categorías son:
Java.io.file, java.util.date, java.lang.string, clases contenedoras (Integer, Double, etc.
).
Clase pública EqualsTest {
Public static void main(String[] args) {
String s 1 = nueva cadena (" SSS ");
Cadena s2 = nueva cadena ("SSS");
salida del sistema. (s 1 . es igual(S2));
}
}
—————————————— ——— ——————————————————————————————————————————— ——————— ——————————————————————————————————————— ——————————— ——————————————————————————————————— ———————————————
Falso
Verdadero
Entonces sabemos que el método equals() se anula en String, lo que hace que su significado cambie y se usa para comparar si el contenido de dos objetos son consistentes.
3. Si queremos anular el método igual () nosotros mismos, dejemos que compare el contenido o use otros métodos (por supuesto, generalmente lo usamos para comparar el contenido, pero quién sabe la implementación real del ¿Método anulado? ¿Qué tipo? O(∩_∩)O~)
Pescado público {
Peso int privado;
Color de cadena privada;
p>Pez público(peso int, color de cadena) {
this.color = color
this.weight = peso;
}
p>
@override
public int hashCode() {
final int prime = 31
int resultado = 1;
resultado = prime * resultado+((color = = null)? 0:color . hashcode());
Resultado = prime * resultado+peso;
Devolver resultado;
}
@override
Booleano público es igual (objeto objeto){
si (esto == obj )
Devuelve verdadero
si (obj == null)
Devuelve falso
si (getClass()!= obj.getClass ())
Devuelve falso
Pez otro =(Pescado)obj;
if (color == null) {
if (other.color!= Vacío)
Devuelve falso
} else if(!color.equals(otros colores))
Devuelve falso
Si (peso! = otro.peso)
Devuelve falso
Devuelve verdadero
}
public int getWeight() {
Peso de retorno;
}
Public void setWeight(int peso) {
this.weight = peso;
}
Cadena pública getColor() {
Color de retorno;
}
SetColor vacío público (color de cadena) {
this.color = color
}
}
Clase pública EqualsTest {
Vacío estático público main(String[ ] args) {
pez f1 = pez nuevo (1, "azul");
pez f2 = pez nuevo (1, "azul"); p>
sistema. println(f 1 == F2);
sistema. println(f 1. igual(F2)); p>
}
———————————————————————————————— ————— ————————————————————————————————————————— ————————— ————————————————————————————————————— —————————————— ————————————————————————————
Incorrecto
p>Real
En este ejemplo, copié el método equals() y el método hashcode() para que la intención original del método equals() ya no sea comparar dos objetos.
Si las referencias son las mismas, pero para comparar si sus contenidos son los mismos.
El contenido anterior es un resumen de libros generales. Las siguientes son algunas cosas que pensé de mí mismo.
Podemos saber que, al final, el ordenador sólo hace algunas operaciones AND-OR, operaciones de suma y multiplicación de números binarios. Entonces, hay algunos operadores básicos y todas las funciones se logran esencialmente mediante el uso de operadores básicos. Y == es uno de los operadores básicos, que tiene diferentes funciones al comparar referencias y comparar tipos de datos básicos:
Compara tipos de datos básicos si los dos valores son iguales, el resultado es. verdadero.
Al comparar referencias, el resultado es verdadero si las referencias apuntan al mismo objeto en la memoria.
Como método, podemos inferir que igual() debe utilizar el operador == en su implementación. Pensando más a fondo, ¿no es la intención original de igual () exactamente lo que hace el operador = al comparar objetos? Entonces, dado que ambos tienen la misma función, ¿por qué necesitamos utilizar el método igual ()? Porque el operador == no nos permite sobrescribir, lo que significa que limita nuestra expresión. En el tercer ejemplo anterior, copiamos el método equals() para comparar si el contenido de los objetos es el mismo. Estas son cosas que el operador == no puede hacer.