Pregunta ¿Por qué no es privado el constructor String ()?


¿Usar un constructor de String () como string literal beneficia en cualquier escenario? El uso de literales de cadena permite la reutilización de objetos existentes, entonces, ¿por qué necesitamos el constructor público? ¿Hay algún uso del mundo real? Por ejemplo, ambos literales apuntan al mismo objeto.

String name1 = "name";//new String("name") creates a new object.
String name2 = "name";

13
2017-11-16 20:47


origen


Respuestas:


Un ejemplo en el que el constructor tiene un propósito útil: cadenas creadas por String.substring() compartir el subyacente char[] del String Ellos son creados por. Entonces si tienes un String de longitud de 10.000.000 (ocupando 20 MB de memoria) y toma sus primeros 5 caracteres como subcadena y luego descarta el original String, esa subcadena aún impedirá que el objeto de 20MB sea elegible para la recolección de basura. Usar el constructor String evitará eso, ya que hace una copia de solo la parte de la matriz de caracteres subyacente que realmente usa el String ejemplo.

Por supuesto, si crea y usa muchas subcadenas del mismo String, especialmente si se superponen, entonces es muy deseable que compartan el subyacente char[], y usar el constructor sería contraproducente.


18
2017-11-16 20:53



Como la cadena es inmutable, las operaciones como la subcadena mantienen la cadena original que puede ser larga. Usar el constructor para crear una nueva cadena a partir de la subcadena creará una nueva cadena y permitirá soltar la cadena anterior (a GC). De esta manera podría liberar la memoria necesaria.
Ejemplo:

String longS = "very long";
String shortS = new String(longS.substring(4));

3
2017-11-16 20:50



Porque a veces es posible que desee crear una copia y no solo tener una nueva referencia a la misma cadena.


0
2017-11-16 20:50



Aquí todas las buenas respuestas, pero creo que vale la pena señalar que Java trata literales bastante diferentes de los que Strings construyó de la manera tradicional.

Esto es una buena Q / A al respecto.


0
2017-11-16 21:29