Aunque la pregunta sobre las cadenas de Java "==" y "igual" es la pregunta más básica en el aprendizaje de Java, todavía hay muchos estudiantes que acaban de aprender Java y no tienen claros los principios que hablé de este tema con mis amigos recientemente. Así que escribí un artículo para compartir con ustedes mi propio entendimiento.
Primero veamos un ejemplo:
Copie el código de código de la siguiente manera:
clase pública TestStringEquals {
público estático vacío principal (String [] argumentos) {
Cadena a = "prueba";
Cadena b = "prueba";
Cadena c = nueva Cadena("prueba");
Cadena d = nueva Cadena("prueba");
Cadena e = a;
Cadena f = nueva Cadena (a);
Cadena g = a + "";
System.out.println(a == b ? "la expresión /"a==b/" es verdadera"
: "la expresión /"a==b/" es falsa");
System.out.println(a == c ? "la expresión /"a==c/" es verdadera"
: "la expresión /"a==c/" es falsa");
System.out.println(c == d ? "la expresión /"c==d/" es verdadera"
: "la expresión /"c==d/" es falsa");
System.out.println(a == e ? "la expresión /"a==e/" es verdadera"
: "la expresión /"a==e/" es falsa");
System.out.println(a == f ? "la expresión /"a==f/" es verdadera"
: "la expresión /"a==f/" es falsa");
System.out.println(a == g ? "la expresión /"a==g/" es verdadera"
: "la expresión /"a==g/" es falsa");
si (a.es igual(b) && b.es igual(c) && c.es igual(d) && d.es igual(e)
&& e.equals(f) && f.equals(g)) {
salida del sistema
.println("a es igual a b es igual a c es igual a d es igual a e es igual a f es igual a g");
}
}
}
Si aún no tienes la respuesta, intentemos hacerlo. ¿Puedes garantizar que todo está correcto?
La respuesta se anuncia a continuación:
Copie el código de código de la siguiente manera:
la expresión "a==b" es verdadera
la expresión "a==c" es falsa
la expresión "c==d" es falsa
la expresión "a==e" es verdadera
la expresión "a==f" es falsa
la expresión "a==g" es falsa
<div style="text-align: left;"></div>a es igual a b es igual a c es igual a d es igual a e es igual a f es igual a g
Para comprender bien este tipo de problemas, la mejor manera es tener un conocimiento profundo del mecanismo y los principios del método "==" y el método "equals" de String en Java. Todos deben saber que "igual" es comparar el contenido de la cadena. Dado que todo el contenido de la cadena en el programa anterior es "prueba", todos serán iguales en comparación con iguales.
¿Pero sabes que el método igual y el método "==" de la clase base Objeto en Java son en realidad lo mismo? Es solo que después de que la clase String hereda la clase Object (todas las clases en Java heredan la clase Object), sobrecarga el método igual, convirtiéndolo en una comparación del contenido de la cadena.
Después de tener una buena comprensión de los iguales, estudiemos ahora las complejidades del método "==".
"==" es un operador en Java. El contenido que compara son los punteros de dos objetos, que es la dirección del objeto real. Entonces es fácil entender que e==a devuelve verdadero.
Veamos la comparación entre cyd nuevamente. Cuando vemos la nueva palabra clave, significa que cyd han vuelto a solicitar una dirección de memoria y luego han asignado el valor "prueba", por lo que c == d devuelve falso. Es comprensible de la misma manera.
La operación "==" entre a, c, d y f devuelve falso.
Entonces veamos g= a + “”. Aunque no vemos la nueva palabra clave, dado que el operador de la clase String “+” está sobrecargado, definitivamente se agregará una nueva Cadena en el método sobrecargado, por lo que se convierte en lo anterior. situación. Entonces lo más difícil de entender es la comparación entre a y b. De hecho, este es el resultado de la optimización del compilador de Java. El compilador de Java tiene un área de almacenamiento llamada grupo constante de cadenas. Una vez compilada la declaración, la "prueba" se almacenará en este grupo de constantes de cadena. Luego, cuando b se define nuevamente, b todavía apunta a esta área, por lo que a y b todavía apuntan a la misma área. Entonces a==b devuelve verdadero.