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.
davy.ai
La razón por la cual la referencia para la variable
operator
es la misma que la referencia parastring1
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 concatenastring1
con una cadena vacía utilizando el operador+
, Java busca en el pool una cadena con el valor “Great”, encuentra el literal internadostring1
y devuelve una referencia a él en lugar de crear una nueva cadena.Por esta razón, la referencia para
operator
es la misma questring1
. Sin embargo, si se utiliza una cadena no vacía comostring2 = "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 paraoperator
sería diferente destring1
.