Grupo de cadenas frente a conjunto constante

Esta pregunta puede ser tonta. Pero estoy completamente confundido. Necesita ayuda para comprender el grupo de cadenas y el conjunto constante. Tengo claro el interinato de cadenas y el grupo de cadenas.

String s1 = "Hello"; String s2 = "Hello"; 

Ahora ambos se refieren al mismo objeto debido al internamiento. (Ie) Como las cadenas son inmutables, solo se crea un objeto y ambos se refieren al mismo objeto.

Y también el grupo constante es algo que contiene todas las constantes (entero, cadena, etc.) que se declaran en una clase. Es específico para cada clase.

  System.out.println("Hello"); //I believe this Hello is different from above. 

Mis preguntas son,

  1. ¿El grupo de cadenas se refiere al grupo de objetos de cadenas constantes en el conjunto constante?
  2. En caso afirmativo, ¿ el grupo de cadenas es común a lo largo de la aplicación o específico de una clase?

Gracias.

Mis preguntas son,

  1. ¿El grupo de cadenas se refiere al grupo de objetos de cadenas constantes en el conjunto constante?

No.

“Grupo constante” hace referencia a una colección de bytes especialmente formateada en un archivo de clase que tiene un significado para el cargador de clases Java. Las “cadenas” en él están serializadas , no son objetos de Java. También hay muchos tipos de constantes, no solo cadenas.

Ver el Capítulo 4.4 la tabla de billar constante

Las instrucciones de Java Virtual Machine no se basan en el diseño en tiempo de ejecución de clases, interfaces, instancias de clase o matrices. En cambio, las instrucciones se refieren a información simbólica en la tabla constant_pool .

Por el contrario, el “Grupo de cadenas” se utiliza en tiempo de ejecución (no solo durante la carga de clases), contiene solo cadenas y las “cadenas” en el grupo de cadenas son objetos Java. El “grupo de cadenas” es un mapa débil seguro para subprocesos desde instancias java.lang.String instancias java.lang.String utilizadas para internar cadenas.

Capítulo 3.10.5. String Literals dice

Un literal de cadena es una referencia a una instancia de clase String (§4.3.1, §4.3.3).

Además, un literal de cadena siempre se refiere a la misma instancia de clase String . Esto se debe a que los literales de cadena (o, más generalmente, las cadenas que son los valores de las expresiones constantes (§15.28)) son “internados” para compartir instancias únicas, utilizando el método String.intern .

Solo hay un grupo de cadenas y todos los literales de cadenas se internan automáticamente.
Además, hay otras piscinas para autoboxing y tal.

El grupo constante es donde esos literales se ponen para la clase.