"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Grupo de constantes de cadenas: ¿Por qué \"new\" crea un nuevo objeto de cadena incluso cuando el literal existe?

Grupo de constantes de cadenas: ¿Por qué \"new\" crea un nuevo objeto de cadena incluso cuando el literal existe?

Publicado el 2024-11-06
Navegar:653

String Constant Pool: Why Does \

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:

  • "Cuando el compilador encuentra un literal de cadena, verifica el grupo para ver si ya existe una cadena idéntica".
  • "En En el caso de 'nuevo', las referencias a literales de cadena todavía se colocan en la tabla de constantes, pero cuando se usa 'nuevo', la JVM está obligada a crear un nuevo objeto de cadena en tiempo de ejecución, en lugar de usar el de la constante. table."

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.

Último tutorial Más>

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