Grupo constante de cadenas: un examen en profundidad
Los literales de cadenas en Java se agrupan para optimizar el uso de la memoria y mejorar el rendimiento. Esto significa que cuando se encuentra un literal de cadena, el compilador busca en el grupo de constantes de cadena un objeto de cadena existente con el mismo valor. Si se encuentra, la referencia se dirige al objeto existente, evitando la creación de uno nuevo.
Sin embargo, surge confusión al usar el operador "nuevo" para crear un nuevo objeto String, ya que esto aparentemente contradice la regla. de internado. Para aclarar esto, examinemos las siguientes declaraciones:
Estas declaraciones indican que si bien el literal String está internado y almacenado en el grupo, el uso de "new" obliga a la JVM a crear un nuevo objeto String. Esto significa que a pesar de la existencia de una cadena equivalente en el grupo, el operador "nuevo" la omite y asigna un nuevo objeto en la memoria fuera del grupo.
Para ilustrar esto, considere el siguiente ejemplo:
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
Como se esperaba, el valor de "uno" y "dos" es "prueba", pero la comparación "==" devuelve falso porque se refieren a diferentes objetos String. Esto se debe a que el uso de "nuevo" fuerza la creación de un nuevo objeto String para "uno", aunque la "prueba" literal de String ya existe en el grupo.
En resumen, el grupo constante de cadenas optimiza uso de memoria internando literales de cadena. Sin embargo, el uso de "nuevo" omite el grupo y crea un nuevo objeto String en la memoria que no es del grupo. Esto da como resultado dos objetos String distintos con el mismo valor pero referencias diferentes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3