Categorías
Basics Diagram Java

¿Crear cadena de Java usando ”” o constructor?


En Java, una cadena se puede crear de dos formas:

String x = "abc";
String y = new String("abc");

¿Cuál es la diferencia entre usar comillas dobles y usar el constructor?

1. Cotizaciones dobles contra constructor

Esta pregunta se puede responder utilizando dos ejemplos sencillos.

Ejemplo 1:

String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True

a==b es cierto porque a y b se refieren al mismo literal de cadena en el área de métodos. Las referencias a la memoria son las mismas.

Cuando se crea el mismo literal de cadena más de una vez, solo se almacena una copia de cada valor de cadena distinto. Se llama «pasantía de cuerdas«. Todas las cadenas de constantes en tiempo de compilación en Java se internan automáticamente.

Ejemplo 2:

String c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d);  // False
System.out.println(c.equals(d)); // True

c==d es falso porque c y d se refieren a dos objetos diferentes en el montón. Los diferentes objetos siempre tienen diferentes referencias de memoria.

Este diagrama ilustra las dos situaciones anteriores:

2. Pasantía de cadenas en tiempo de ejecución

Gracias a LukasEder (su comentario a continuación):

La internación de cadenas aún se puede realizar en tiempo de ejecución, incluso si se construyen dos cadenas con constructores:

  Los 10 métodos principales para matrices Java
String c = new String("abcd").intern();
String d = new String("abcd").intern();
System.out.println(c == d);  // Now true
System.out.println(c.equals(d)); // True

3. Cuándo usar cuál

Debido a que el literal «abcd» ya es de tipo String, el uso del constructor creará un objeto adicional innecesario. Por lo tanto, se deben usar comillas dobles si solo necesita crear una cadena.

Si necesita crear un nuevo objeto en el montón, debe usar el constructor. Aquí hay un caso de uso.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *