in

String vs StringBuilder vs StringBuffer en Java

gfg 200x200 min

Requisitos previos: Cadena, inicializar una cadena
Considere el siguiente código con tres funciones de concatenación con tres tipos diferentes de parámetros, String, StringBuffer y StringBuilder.

Java

class Geeksforgeeks {

    

    public static void concat1(String s1)

    {

        s1 = s1 + "forgeeks";

    }

    

    public static void concat2(StringBuilder s2)

    {

        s2.append("forgeeks");

    }

    

    public static void concat3(StringBuffer s3)

    {

        s3.append("forgeeks");

    }

    public static void main(String[] args)

    {

        String s1 = "Geeks";

        

        concat1(s1);

        System.out.println("String: " + s1);

        StringBuilder s2 = new StringBuilder("Geeks");

        

        concat2(s2);

        System.out.println("StringBuilder: " + s2);

        StringBuffer s3 = new StringBuffer("Geeks");

        

        concat3(s3);

        System.out.println("StringBuffer: " + s3);

    }

}

Producción
String: Geeks
StringBuilder: Geeksforgeeks
StringBuffer: Geeksforgeeks

Explicación:

  1. Concat1: En este método, pasamos una cadena «Geeks» y ejecutamos «s1 = s1 +» forgeeks «. La cadena pasada desde main () no se cambia, esto se debe al hecho de que String es inmutable. Alterar el valor de la cadena crea otro objeto y s1 en concat1 () almacena la referencia de la nueva cadena. Las referencias s1 en main () y cocat1 () se refieren a cadenas diferentes.
  2. Concat2: En este método, pasamos una cadena «Geeks» y ejecutamos «s2.append (» forgeeks «)» que cambia el valor real de la cadena (en main) a «Geeksforgeeks». Esto se debe al simple hecho de que StringBuilder es mudable y por tanto cambia su valor.
  3. Concat3: StringBuffer es similar a StringBuilder excepto por una diferencia de que StringBuffer es seguro para subprocesos, es decir, varios subprocesos pueden usarlo sin ningún problema. La seguridad de subprocesos trae una penalización de rendimiento.
    Cuándo usar cuál:
  • Si una cadena va a permanecer constante en todo el programa, utilice el objeto de clase String porque un objeto String es inmutable.
  • Si una cadena puede cambiar (por ejemplo: mucha lógica y operaciones en la construcción de la cadena) y solo se podrá acceder a ella desde un único hilo, usar un StringBuilder es suficiente.
  • Si una cadena puede cambiar y se accederá a ella desde varios subprocesos, use un StringBuffer porque StringBuffer es síncrono, por lo que tiene seguridad para subprocesos.
  • Si no desea seguridad para subprocesos, también puede optar por la clase StringBuilder, ya que no está sincronizada.

Conversión entre tipos de cadenas en Java

A veces es necesario convertir un objeto de cadena de diferentes clases como String, StringBuffer, StringBuilder entre sí. A continuación se muestran algunas técnicas para hacer lo mismo.

1. De String a StringBuffer y StringBuilder:

Éste es fácil. Podemos pasar directamente el objeto de la clase String a los constructores de clases StringBuffer y StringBuilder. Como la clase String es inmutable en Java, para editar una cadena, podemos realizar lo mismo convirtiéndola en objetos de clase StringBuffer o StringBuilder. A continuación se muestra el programa Java para demostrar lo mismo.

Java

public class Test {

    public static void main(String[] args)

    {

        String str = "Geeks";

        

        StringBuffer sbr = new StringBuffer(str);

        sbr.reverse();

        System.out.println(sbr);

        

        StringBuilder sbl = new StringBuilder(str);

        sbl.append("ForGeeks");

        System.out.println(sbl);

    }

}

Producción
skeeG
GeeksForGeeks

2. De StringBuffer y StringBuilder a String:

Esta conversión se puede realizar usando Encadenar() método que se anula en las clases StringBuffer y StringBuilder.
A continuación se muestra el programa Java para demostrar lo mismo. Tenga en cuenta que mientras usamos Encadenar() , se asigna un nuevo objeto String (en el área Heap) y se inicializa en la secuencia de caracteres representada actualmente por el objeto StringBuffer, lo que significa que los cambios posteriores al objeto StringBuffer no afectan el contenido del objeto String.

Java

public class Test {

    public static void main(String[] args)

    {

        StringBuffer sbr = new StringBuffer("Geeks");

        StringBuilder sbdr = new StringBuilder("Hello");

        

        String str = sbr.toString();

        System.out.println(

            "StringBuffer object to String : ");

        System.out.println(str);

        

        String str1 = sbdr.toString();

        System.out.println(

            "StringBuilder object to String : ");

        System.out.println(str1);

        

        

        sbr.append("ForGeeks");

        System.out.println(sbr);

        System.out.println(str);

    }

}

Producción
StringBuffer object to String : 
Geeks
StringBuilder object to String : 
Hello
GeeksForGeeks
Geeks

3. De StringBuffer a StringBuilder o viceversa:

Esta conversión es complicada. No hay una forma directa de convertir lo mismo. En este caso, podemos usar un objeto de clase String. Primero convertimos el objeto StringBuffer / StringBuilder en String usando Encadenar() y luego de String a StringBuilder / StringBuffer usando constructores.

A continuación se muestra el programa Java para demostrar lo mismo.

Java

public class Test {

    public static void main(String[] args)

    {

        StringBuffer sbr = new StringBuffer("Geeks");

        

        

        String str = sbr.toString();

        StringBuilder sbl = new StringBuilder(str);

        System.out.println(sbl);

    }

}

Conclusión:

  • Los objetos de String son inmutables y los objetos de StringBuffer y StringBuilder son mutables.
  • StringBuffer y StringBuilder son similares, pero StringBuilder es más rápido y preferido sobre StringBuffer para el programa de un solo subproceso. Si se necesita seguridad para subprocesos, entonces se usa StringBuffer.

Artículo relacionado :
Invertir una cadena en Java (5 formas diferentes)

Este artículo es una contribución de Pranjal y Gaurav Miglani. Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a contrib@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

¡Atención lector! No dejes de aprender ahora. Hazte con todo lo importante Fundación Java y conceptos de colecciones con el Curso de Fundamentos de Java y Colecciones de Java a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

Deja una respuesta

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

apple touch icon@2

Obtener el día de la semana en SQL Server 2005/2008

Licuadora vs Exprimidor – Diferencia y Comparación