es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se crea una referencia al utilizar el operador + para concatenar dos cadenas.

Estoy tratando de concatenar dos cadenas, una cadena con algún valor y otra vacía.

Ejemplo:

String string1 = "Great";
String string2 = "";

y concatenando estas dos cadenas con la función concat y el operador +.

Ejemplo:

String cat = string1.concat(string2);
String operator = string1 + string2;

Según mi comprensión, al usar una cadena vacía en la función concat ya que la cadena2 está vacía, no se creará una nueva referencia. Pero al usar el operador + se creará una nueva referencia en la constante del pool de cadenas. Pero en el siguiente código, al usar el operador + no se crea una nueva referencia.

public class Main {

    public static void main(String[] args) {
        String string1 = "Great";
        String string2 = "";

        String cat = string1.concat(string2);
        if(string1 == cat) {
            System.out.println("Iguales");
        } else {
            System.out.println("No son iguales");
        }
        String operator = string1 + string2;
        if(operator == string1) {
            System.out.println("Iguales");
        } else {
            System.out.println("No son iguales");
        }
    }
}

Salida:

string1: 69066349
cat: 69066349
Iguales

string1: 69066349
operator: 69066349
No son iguales

En el código anterior, como se utiliza el operador +, la referencia de la variable “operator” debería hacer referencia a la nueva memoria, pero está apuntando a la referencia de “string1”. Por favor, explique el código anterior.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la referencia para la variable operator es la misma que la referencia para string1 se debe a un concepto llamado String Pool.

    En Java, los literales de String (cadenas definidas entre comillas dobles como “Great”) son internados (almacenados en un pool común) y reutilizados. Cuando se concatenan dos cadenas utilizando el operador +, Java busca literales de cadena y verifica si hay una cadena coincidente en el pool. Si la encuentra, devuelve una referencia a esa cadena. Si no la encuentra, crea una nueva cadena y la agrega al pool.

    En el código proporcionado, string1 es un literal de cadena e es internado por Java. Cuando se concatena string1 con una cadena vacía utilizando el operador +, Java busca en el pool una cadena con el valor “Great”, encuentra el literal internado string1 y devuelve una referencia a él en lugar de crear una nueva cadena.

    Por esta razón, la referencia para operator es la misma que string1. Sin embargo, si se utiliza una cadena no vacía como string2 = "Awesome", entonces el uso del operador + crearía una nueva cadena en el pool con el valor “GreatAwesome” y devolvería una referencia a ella. La referencia para operator sería diferente de string1.

Comments are closed.