I det givna exemplet kommer endast ett objekt att skapas. För det första kommer JVM inte att hitta något strängobjekt med värdet Welcome i strängkonstantpoolen, så det kommer att skapa ett nytt objekt. Efter det kommer den att hitta strängen med värdet Welcome in the pool, den kommer inte att skapa ett nytt objekt utan returnerar referensen till samma instans. I den här artikeln kommer vi att lära oss om Java Strings.
Vad är strängar i Java?
Strängar är den typ av objekt som kan lagra karaktären av värden och i Java lagras varje tecken i 16 bitar, dvs med UTF 16-bitars kodning. En sträng fungerar på samma sätt som en array av tecken i Java.
Exempel:
String name = 'Geeks';>

Strängexempel i Java
Nedan är ett exempel på en sträng i 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); } }> Produktion
example>
Sätt att skapa en sträng
Det finns två sätt att skapa en sträng i Java:
- Sträng bokstavlig
- Använder nytt nyckelord
Syntax:
= '';>
1. Sträng bokstavlig
För att göra Java mer minneseffektivt (eftersom inga nya objekt skapas om det redan finns i strängkonstantpoolen).
Exempel:
String demoString = techcodeview.com;>
2. Använda nytt nyckelord
- String s = ny String(Välkommen);
- I ett sådant fall kommer JVM att skapa ett nytt strängobjekt i normalt (icke-pool) heapminne och den bokstavliga Welcome kommer att placeras i strängkonstantpoolen. Variabeln s kommer att referera till objektet i högen (icke-pool)
Exempel:
delsträng sträng java
String demoString = new String (techcodeview.com);>
Gränssnitt och klasser i strängar i Java
CharBuffer : Den här klassen implementerar CharSequence-gränssnittet. Denna klass används för att tillåta teckenbuffertar att användas i stället för CharSequences. Ett exempel på sådan användning är paketet med reguljära uttryck java.util.regex.
Sträng : Det är en sekvens av tecken. I Java är objekt av String oföränderliga vilket innebär en konstant och kan inte ändras när de väl har skapats.
CharSequence Interface
CharSequence Interface används för att representera sekvensen av tecken i Java.
Klasser som implementeras med hjälp av CharSequence-gränssnittet nämns nedan och dessa tillhandahåller mycket av funktionalitet som delsträng, lastoccurence, första förekomst, concatenate , toupper, tolower etc.
- Sträng
- StringBuffer
- StringBuilder
1. Sträng
String är en oföränderlig klass som betyder en konstant och kan inte ändras när den väl har skapats och om vi vill ändra måste vi skapa ett nytt objekt och till och med funktionaliteten det ger som topp, tolower, etc. Alla dessa returnerar ett nytt objekt, det ändras inte. det ursprungliga föremålet. Den är automatiskt trådsäker.
Exempel på json-format
Syntax
String str= 'geeks'; or String str= new String('geeks')>2. StringBuffer
StringBuffer är en kamratklass av Sträng , den är föränderlig till sin natur och den är trådsäker klass , vi kan använda den när vi har en miljö med flera trådar och ett delat objekt av strängbuffert, dvs. används av flera trådar. Eftersom det är trådsäkert så det finns extra overhead, så det används främst för flertrådade program.
Syntax:
StringBuffer demoString = new StringBuffer('techcodeview.com');>3. StringBuilder
StringBuilder i Java representerar ett alternativ till String och StringBuffer Class, eftersom det skapar en föränderlig sekvens av tecken och det är inte trådsäkert. Den används endast inom tråden, så det finns ingen extra overhead, så den används främst för enkelgängade program.
Syntax:
StringBuilder demoString = new StringBuilder(); demoString.append('GFG');>StringTokenizer
StringTokenizer klass i Java används för att bryta en sträng till tokens.
Exempel:

Ett StringTokenizer-objekt behåller internt en aktuell position inom strängen som ska tokeniseras. Vissa operationer flyttar fram denna nuvarande position förbi de bearbetade tecknen. En token returneras genom att ta en delsträng av strängen som användes för att skapa StringTokenizer-objektet.
knapp i mitten css
StringJoiner är en klass i java.util paket som används för att konstruera en sekvens av tecken(strängar) separerade med en avgränsare och som eventuellt börjar med ett angett prefix och slutar med ett angett suffix. Även om detta också kan göras med hjälp av StringBuilder-klassen för att lägga till en avgränsare efter varje sträng, erbjuder StringJoiner ett enkelt sätt att göra det utan mycket kod att skriva.
Syntax:
public StringJoiner(CharSequence delimiter)>
Ovan såg vi att vi kan skapa en sträng av String Literal.
String demoString =Välkommen;
Här kontrollerar JVM String Constant Pool. Om strängen inte finns skapas en ny stränginstans och placeras i en pool. Om strängen finns kommer den inte att skapa ett nytt objekt. Snarare kommer det att returnera referensen till samma instans. Cachen som lagrar dessa stränginstanser är känd som String Constant pool eller String Pool. I tidigare versioner av Java var upp till JDK 6 String pool placerad i PermGen (Permanent Generation) utrymme. Men i JDK 7 flyttas den till huvudhögområdet.
Immutable String i Java
I Java är strängobjekt oföränderliga. Oföränderlig betyder helt enkelt oföränderlig eller oföränderlig. När ett strängobjekt har skapats kan dess data eller tillstånd inte ändras men ett nytt strängobjekt skapas.
Nedan är implementeringen av ämnet:
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); } }> Produktion
Sachin>
Här ändras inte Sachin utan ett nytt objekt skapas med Sachin Tendulkar. Det är därför en sträng är känd som oföränderlig.
Som du kan se i den givna figuren skapas två objekt men referensvariabeln hänvisar fortfarande till Sachin och inte till Sachin Tendulkar. Men om vi uttryckligen tilldelar den till referensvariabeln kommer den att hänvisa till Sachin Tendulkar-objektet.
scan.nextstring java
Till exempel:
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); } }> Produktion
Sachin Tendulkar>
Minnestilldelning av sträng
Närhelst ett strängobjekt skapas som ett bokstavligt, kommer objektet att skapas i strängkonstantpoolen. Detta gör att JVM kan optimera initieringen av String literal.
Exempel:
String demoString = 'Geeks';>
Strängen kan också deklareras med a ny operatör d.v.s. dynamiskt allokerad. Om String är dynamiskt allokerat tilldelas de en ny minnesplats i högen. Den här strängen kommer inte att läggas till strängkonstantpoolen.
Exempel:
String demoString = new String('Geeks');>Om du vill lagra denna sträng i konstantpoolen måste du internisera den.
Exempel:
String internedString = demoString.intern(); // this will add the string to string constant pool.>
Det är att föredra att använda String literals eftersom det tillåter JVM att optimera minnesallokering.
Ett exempel som visar hur man deklarerar en sträng
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); } }> Produktion
String name = techcodeview.com String newString = techcodeview.com>
Notera: Strängobjekt skapas i Heap-området och bokstaver lagras i ett speciellt minnesområde som kallas strängkonstantpool.
Varför flyttade Stringpoolen från PermGen till de normalt högområde?
PermGen-utrymmet är begränsat, standardstorleken är bara 64 MB. det var ett problem med att skapa och lagra för många strängobjekt i PermGen-utrymmet. Det var därför Stringpoolen flyttades till ett större högområde. För att göra Java mer minneseffektivt används begreppet string literal. Genom att använda nyckelordet 'nya' kommer JVM att skapa ett nytt strängobjekt i det normala heapområdet även om samma strängobjekt finns i strängpoolen.
ternär operatör java
Till exempel:
String demoString = new String('Bhubaneswar');>Låt oss ta en titt på konceptet med ett Java-program och visualisera den faktiska JVM-minnesstrukturen:
Nedan är implementeringen av ovanstående tillvägagångssätt:
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); } }> Produktion
TAT TAT TAT TAT>

String Pool i Java
Notera: Alla objekt i Java lagras i en hög. Referensvariabeln är till objektet som är lagrat i stackområdet eller så kan de finnas i andra objekt som också placerar dem i heapområdet.
Exempel 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); } }> Produktion
GFG FG>
Exempel 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); } }> Produktion
Gfg Gfg>
Vanliga frågor
1. Vad är strängar i Java?
Strängar är de typer av objekt som kan lagra tecken som element.
2. Varför är strängobjekt oföränderliga i Java?
Eftersom java använder begreppet sträng bokstavlig. Anta att det finns 5 referensvariabler, alla refererar till ett objekt Sachin. Om en referensvariabel ändrar värdet på objektet kommer den att påverkas av alla referensvariabler. Det är därför strängobjekt är oföränderliga i Java.
3. Varför använder Java begreppet sträng bokstavlig?
För att göra Java mer minneseffektivt (eftersom inga nya objekt skapas om det redan finns i strängkonstantpoolen).