¿Se pueden realmente comparar objetos de cadena usando ==?
System.out.print(str1==str2); Cualquiera con un poco de conocimiento de Java sabe que generará false, porque == compara referencias, es igual a lo que se compara. es contenido. ¡No te estoy engañando, puedes ejecutarlo en tu propia máquina y los resultados serán verdaderos! La razón es simple: el objeto String se coloca en el grupo constante y la cadena "java" aparece nuevamente. La JVM está muy emocionada de señalar la referencia str2 al objeto "! Java". Esto no es difícil de entender. Oh, ejemplo B: String str1 = new String("java");
String str2 = new String("java");
System.out.print(str1== str2);
Viendo el ejemplo anterior, hemos aprendido una forma inteligente. Lamentablemente, la JVM no hace esto y el resultado es falso. La razón es simple: la forma de declaración en el ejemplo A crea un objeto "java" en el grupo constante de cadenas, pero tan pronto como ve la nueva palabra clave, la JVM asigna espacio para la cadena en el montón. Es por eso que puse "Cómo crear un objeto de cadena" más adelante. No te preocupes, hay otro ejemplo.
Ejemplo C: Cadena str1 = "java";
Cadena str2 = "blog";
Cadena s = str1+str2;
System.out.print(s=="javablog");
Vuelva a leer el ejemplo. En este ejemplo, muchos camaradas no se atreven a decir qué es verdadero o falso. Los camaradas a los que les gusta jugar acertijos dirán que es falso, ¿verdad? ... ¡Felicitaciones, puedes captar la respuesta! Elimina la palabra "barra" y tienes toda la razón. La razón es simple. La JVM coloca objetos String de tipo String str1 = "java"; en el grupo de constantes de cadena, pero lo hace en tiempo de compilación, mientras que String s = str1+str2; , podemos verlo de un vistazo, pero Java debe saberlo en tiempo de ejecución, y la estructura del cerebro humano y la computadora son diferentes), es decir, str1 = str1+str2 no se conoce en tiempo de ejecución. La estructura del cerebro humano y la computadora son diferentes), lo que significa que str1 + str2 se crea en el montón y, por supuesto, la referencia s no puede apuntar a un objeto en el grupo constante de cadenas. Los lectores que no fallaron deberían continuar leyendo el Ejemplo D.