logo

Cordes en Java

En l'exemple donat només es crearà un objecte. En primer lloc, JVM no trobarà cap objecte de cadena amb el valor Benvingut al grup constant de cadena, de manera que crearà un objecte nou. Després d'això, trobarà la cadena amb el valor Benvingut al grup, no crearà un objecte nou sinó que retornarà la referència a la mateixa instància. En aquest article, aprendrem sobre les cadenes de Java.

Què són les cadenes a Java?

Les cadenes són el tipus d'objectes que poden emmagatzemar el caràcter dels valors i a Java, cada caràcter s'emmagatzema en 16 bits, és a dir, utilitzant la codificació UTF de 16 bits. Una cadena actua de la mateixa manera que una matriu de caràcters a Java.

Exemple:



String name = 'Geeks';>
Exemple de cadena en Java

Exemple de cadena en Java

A continuació es mostra un exemple d'una cadena en Java:

Java
// Java Program to demonstrate // String public class StringExample {  // Main Function  public static void main(String args[])  {  String str = new String('example');  // creating Java string by new keyword  // this statement create two object i.e  // first the object is created in heap  // memory area and second the object is  // created in String constant pool.  System.out.println(str);  } }>

Sortida
example>

Maneres de crear una cadena

Hi ha dues maneres de crear una cadena a Java:

  • Corda Literal
  • S'està utilitzant la paraula clau nova

Sintaxi:

 = '';>

1. Corda literal

Per fer que Java sigui més eficient de la memòria (perquè no es creen objectes nous si ja existeix a l'agrupació constant de cadenes).

Exemple:

String demoString = techcodeview.com;>

2. Utilitzant la paraula clau nova

  • String s = new String(Benvingut);
  • En aquest cas, la JVM crearà un nou objecte de cadena a la memòria d'emmagatzematge dinàmic normal (que no sigui agrupació) i el literal Benvingut es col·locarà a l'agrupació constant de cadena. La variable s es referirà a l'objecte de l'heap (no pool)

Exemple:

String demoString = new String (techcodeview.com);>

Interfícies i classes en cadenes a Java

CharBuffer : Aquesta classe implementa la interfície CharSequence. Aquesta classe s'utilitza per permetre que els buffers de caràcters s'utilitzin en lloc de CharSequences. Un exemple d'aquest ús és el paquet d'expressions regulars java.util.regex.

Corda : És una seqüència de caràcters. A Java, els objectes de String són immutables, el que significa una constant i no es poden canviar un cop creats.

Interfície CharSequence

La interfície CharSequence s'utilitza per representar la seqüència de caràcters a Java.
Les classes que s'implementen mitjançant la interfície CharSequence s'esmenten a continuació i aquestes proporcionen moltes de les funcionalitats com ara subcadenes, darrers casos, primera aparició, concatenar, topper, tolower, etc.

  1. Corda
  2. StringBuffer
  3. StringBuilder

1. Corda

String és una classe immutable que significa una constant i no es pot canviar un cop creat i si volem canviar, hem de crear un nou objecte i fins i tot la funcionalitat que proporciona com topper, tolower, etc., tots aquests retornen un nou objecte, no es modifica. l'objecte original. És automàticament segur per a fils.

Sintaxi

String str= 'geeks';  or String str= new String('geeks')>

2. StringBuffer

StringBuffer és una classe d'iguals Corda , és de naturalesa mutable i és una classe segura per a fils, el podem utilitzar quan tenim un entorn multifils i un objecte compartit de memòria intermèdia de cadena, és a dir, utilitzat per diversos fils. Com que és segur per a fils, hi ha una sobrecàrrega addicional, de manera que s'utilitza principalment per a programes multifils.

Sintaxi:

StringBuffer demoString = new StringBuffer('techcodeview.com');>

3. StringBuilder

StringBuilder en Java representa una alternativa a String i StringBuffer Class, ja que crea una seqüència mutable de caràcters i no és segur per a threads. Només s'utilitza dins del fil, de manera que no hi ha cap sobrecàrrega addicional, de manera que s'utilitza principalment per a un programa de fil únic.

Sintaxi:

StringBuilder demoString = new StringBuilder(); demoString.append('GFG');>

StringTokenizer

StringTokenizer La classe a Java s'utilitza per dividir una cadena en fitxes.

python ordenant tuples

Exemple:

String Tokenizer a Java

Un objecte StringTokenizer manté internament una posició actual dins de la cadena que s'ha de marcar. Algunes operacions avancen aquesta posició actual més enllà dels caràcters processats. Es retorna un testimoni agafant una subcadena de la cadena que es va utilitzar per crear l'objecte StringTokenizer.

StringJoiner és una classe en java.util paquet que s'utilitza per construir una seqüència de caràcters (cadenes) separats per un delimitador i opcionalment començant amb un prefix proporcionat i acabant amb un sufix proporcionat. Tot i que això també es pot fer amb l'ajuda de la classe StringBuilder per afegir un delimitador després de cada cadena, StringJoiner ofereix una manera senzilla de fer-ho sense massa codi per escriure.

Sintaxi:

public StringJoiner(CharSequence delimiter)>

Més amunt hem vist que podem crear una cadena mitjançant String Literal.

String demoString =Benvingut;

Aquí, la JVM comprova el grup de constants de cadena. Si la cadena no existeix, es crea una nova instància de cadena i es col·loca en un grup. Si la cadena existeix, no crearà cap objecte nou. Més aviat, tornarà la referència a la mateixa instància. La memòria cau que emmagatzema aquestes instàncies de cadena es coneix com a grup de constants de cadena o grup de cadenes. En versions anteriors de Java fins a JDK 6 String pool es trobava dins de l'espai PermGen (generació permanent). Però a JDK 7 es mou a l'àrea principal de l'emmagatzematge.

Cadena immutable en Java

A Java, els objectes de cadena són immutables. Immutable significa simplement inmodificable o inalterable. Un cop creat un objecte de cadena, les seves dades o estat no es poden canviar, però es crea un objecte de cadena nou.

A continuació es mostra la implementació del tema:

Java
// Java Program to demonstrate Immutable String in Java import java.io.*; class GFG {  public static void main(String[] args)  {  String s = 'Sachin';    // concat() method appends  // the string at the end  s.concat(' Tendulkar');    // This will print Sachin  // because strings are  // immutable objects  System.out.println(s);  } }>

Sortida
Sachin>

Aquí Sachin no es modifica, sinó que es crea un objecte nou amb Sachin Tendulkar. És per això que una cadena es coneix com a immutable.

Com podeu veure a la figura donada, es creen dos objectes però la variable de referència encara es refereix a Sachin i no a Sachin Tendulkar. Però si l'assignem explícitament a la variable de referència, es referirà a l'objecte Sachin Tendulkar.

Per exemple:

Java
// Java Program to demonstrate Explicitly assigned strings import java.io.*; class GFG {  public static void main(String[] args)  {  String name = 'Sachin';  name = name.concat(' Tendulkar');  System.out.println(name);  } }>

Sortida
Sachin Tendulkar>

Assignació de memòria de cadena

Sempre que es creï un objecte String com a literal, l'objecte es crearà al grup de constants String. Això permet a JVM optimitzar la inicialització del literal String.

Exemple:

String demoString = 'Geeks';>

La cadena també es pot declarar utilitzant a nou operador, és a dir, assignat dinàmicament. En cas que String s'assignin dinàmicament, se'ls assigna una nova ubicació de memòria a la pila. Aquesta cadena no s'afegirà al grup de constants String.

Exemple:

String demoString = new String('Geeks');>

Si voleu emmagatzemar aquesta cadena a l'agrupació constant, haureu d'internar-la.

Exemple:

String internedString = demoString.intern();  // this will add the string to string constant pool.>

Es prefereix utilitzar literals String, ja que permet a JVM optimitzar l'assignació de memòria.

Un exemple que mostra com declarar una cadena

Java
// Java code to illustrate String import java.io.*; import java.lang.*; class Test {  public static void main(String[] args)  {  // Declare String without using new operator  String name = 'techcodeview.com';  // Prints the String.  System.out.println('String name = ' + name);  // Declare String using new operator  String newString = new String('techcodeview.com');  // Prints the String.  System.out.println('String newString = ' + newString);  } }>

Sortida
String name = techcodeview.com String newString = techcodeview.com>


Nota: L'objecte String es crea a l'àrea Heap i els literals s'emmagatzemen a l'àrea de memòria especial coneguda com a grup constant de cadena.

Per què el grup String es va traslladar de PermGen a el zona de pila normal?

L'espai PermGen és limitat, la mida predeterminada és de només 64 MB. va ser un problema per crear i emmagatzemar massa objectes de cadena a l'espai PermGen. És per això que la piscina String es va traslladar a una àrea de pila més gran. Per fer que Java sigui més eficient de la memòria, s'utilitza el concepte de literal de cadena. Mitjançant l'ús de la paraula clau 'new', la JVM crearà un objecte de cadena nou a l'àrea d'emmagatzematge dinàmic normal encara que el mateix objecte de cadena estigui present al grup de cadenes.

Per exemple:

String demoString = new String('Bhubaneswar');>

Fem una ullada al concepte amb un programa Java i visualitzem l'estructura de memòria JVM real:

A continuació es mostra la implementació de l'enfocament anterior:

Java
// Java program and visualize the // actual JVM memory structure // mentioned in image class StringStorage {  public static void main(String args[])  {  // Declaring Strings  String s1 = 'TAT';  String s2 = 'TAT';  String s3 = new String('TAT');  String s4 = new String('TAT');  // Printing all the Strings  System.out.println(s1);  System.out.println(s2);  System.out.println(s3);  System.out.println(s4);  } }>

Sortida
TAT TAT TAT TAT>
Pool de cadenes a Java

Pool de cadenes a Java

Nota: Tots els objectes de Java s'emmagatzemen en un munt. La variable de referència és a l'objecte emmagatzemat a l'àrea de la pila o poden estar continguts en altres objectes, cosa que també els posa a l'àrea de pila.

Exemple 1:

Java
// Construct String from subset of char array // Driver Class class GFG {  // main function  public static void main(String args[])  {  byte ascii[] = { 71, 70, 71 };  String firstString = new String(ascii);  System.out.println(firstString);  String secondString = new String(ascii, 1, 2);  System.out.println(secondString);  } }>

Sortida
GFG FG>

Exemple 2:

Java
// Construct one string from another class GFG {  public static void main(String args[])  {  char characters[] = { 'G', 'f', 'g' };  String firstString = new String(characters);  String secondString = new String(firstString);  System.out.println(firstString);  System.out.println(secondString);  } }>

Sortida
Gfg Gfg>

Preguntes freqüents

1. Què són les cadenes a Java?

Les cadenes són els tipus d'objectes que poden emmagatzemar caràcters com a elements.

2. Per què els objectes de cadena són immutables a Java?

Perquè java utilitza el concepte de cadena literal. Suposem que hi ha 5 variables de referència, totes fan referència a un objecte Sachin. Si una variable de referència canvia el valor de l'objecte, es veurà afectada per totes les variables de referència. És per això que els objectes de cadena són immutables a Java.

3. Per què Java utilitza el concepte de cadena literal?

Per fer que Java sigui més eficient de la memòria (perquè no es creen objectes nous si ja existeix a l'agrupació constant de cadenes).