Dotajā piemērā tiks izveidots tikai viens objekts. Pirmkārt, JVM virknes konstantes pūlā neatradīs nevienu virknes objektu ar vērtību Welcome, tāpēc tas izveidos jaunu objektu. Pēc tam tas pūlā atradīs virkni ar vērtību Welcome, tas neradīs jaunu objektu, bet atgriezīs atsauci uz to pašu gadījumu. Šajā rakstā mēs uzzināsim par Java virknēm.
Kas ir virknes Java?
Virknes ir objektu tips, kas var saglabāt vērtību rakstzīmes, un Java, katra rakstzīme tiek saglabāta 16 bitos, t.i., izmantojot UTF 16 bitu kodējumu. Virkne Java darbojas tāpat kā rakstzīmju masīvs.
Piemērs:
String name = 'Geeks';>

Virknes piemērs Java valodā
Tālāk ir sniegts Java virknes piemērs:
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); } }>
Izvade
example>
Virknes izveides veidi
Ir divi veidi, kā izveidot virkni Java:
- String Literal
- Jauna atslēgvārda izmantošana
Sintakse:
= '';>
1. String literāls
Lai padarītu Java efektīvāku atmiņu (jo netiek izveidoti jauni objekti, ja tas jau pastāv virknes konstantes pūlā).
Piemērs:
String demoString = techcodeview.com;>
2. Jauna atslēgvārda izmantošana
- Virkne s = new String(Laipni lūdzam);
- Šādā gadījumā JVM izveidos jaunu virknes objektu parastā (ne-pūles) kaudzes atmiņā, un burtiskais Welcome tiks ievietots virknes nemainīgajā pūlā. Mainīgais s attieksies uz objektu kaudzē (nav pūla)
Piemērs:
String demoString = new String (techcodeview.com);>
Saskarnes un klases virknēs Java
CharBuffer : šī klase ievieš CharSequence saskarni. Šī klase tiek izmantota, lai CharSequences vietā varētu izmantot rakstzīmju buferus. Šāda lietojuma piemērs ir regulārās izteiksmes pakotne java.util.regex.
Stīga : tā ir rakstzīmju secība. Java valodā String objekti ir nemainīgi, kas nozīmē konstanti, un tos nevar mainīt pēc izveides.
CharSequence interfeiss
CharSequence interfeiss tiek izmantots, lai attēlotu rakstzīmju secību Java.
Klases, kas tiek ieviestas, izmantojot CharSequence interfeisu, ir minētas zemāk, un tās nodrošina lielu daļu funkcionalitātes, piemēram, apakšvirknes, lastoccurence, pirmā gadījuma, konkatenācija , toupper, tolower utt.
- Stīga
- StringBuffer
- StringBuilder
1. Stīga
Virkne ir nemainīga klase, kas nozīmē konstantu, un to nevar mainīt pēc izveidošanas, un, ja vēlamies mainīt, mums ir jāizveido jauns objekts un pat tā nodrošinātā funkcionalitāte, piemēram, toupper, tolower utt., tas viss atgriež jaunu objektu, tas netiek mainīts. sākotnējais objekts. Tas ir automātiski pavediens drošs.
Sintakse
Linux make komanda
String str= 'geeks'; or String str= new String('geeks')>
2. StringBuffer
StringBuffer ir vienaudžu klase Stīga , tam ir mainīgs raksturs un tā ir pavedienu droša klase, mēs to varam izmantot, ja mums ir vairāku pavedienu vide un kopīgs virknes bufera objekts, t.i., to izmanto vairāki pavedieni. Tā kā tas ir drošs pavedieniem, ir papildu izmaksas, tāpēc to galvenokārt izmanto daudzpavedienu programmām.
Sintakse:
StringBuffer demoString = new StringBuffer('techcodeview.com');>
3. StringBuilder
StringBuilder Java ir alternatīva virknei un StringBuffer klasei, jo tā rada mainīgu rakstzīmju secību un nav droša pavedienam. Tas tiek izmantots tikai pavedienā, tāpēc tas nerada papildu izmaksas, tāpēc to galvenokārt izmanto vienai vītnei.
Sintakse:
StringBuilder demoString = new StringBuilder(); demoString.append('GFG');>
StringTokenizer
StringTokenizer klase Java tiek izmantota, lai sadalītu virkni marķieros.
Piemērs:

StringTokenizer objekts iekšēji uztur pašreizējo pozīciju marķierējamajā virknē. Dažas darbības virza šo pašreizējo pozīciju tālāk par apstrādātajām rakstzīmēm. Marķieris tiek atgriezts, izmantojot virknes apakšvirkni, kas tika izmantota, lai izveidotu StringTokenizer objektu.
StringJoiner ir klase iekšā java.util pakotne, ko izmanto, lai izveidotu rakstzīmju (virkņu) secību, kas atdalīta ar norobežotāju un pēc izvēles sākas ar piegādāto prefiksu un beidzas ar piegādāto sufiksu. Lai gan to var izdarīt arī ar klases StringBuilder palīdzību, lai pēc katras virknes pievienotu atdalītāju, StringJoiner nodrošina vienkāršu veidu, kā to izdarīt bez daudz koda rakstīšanas.
Sintakse:
public StringJoiner(CharSequence delimiter)>
Iepriekš mēs redzējām, ka mēs varam izveidot virkni pēc String Literal.
String demoString =Laipni lūdzam;
Šeit JVM pārbauda virknes pastāvīgo kopu. Ja virkne neeksistē, tiek izveidota jauna virknes instance un ievietota pūlā. Ja virkne pastāv, tā neradīs jaunu objektu. Drīzāk tas atgriezīs atsauci uz to pašu gadījumu. Kešatmiņa, kurā tiek glabāti šie virkņu gadījumi, ir zināma kā virkņu konstante pūla vai virkņu kopa. Iepriekšējās Java versijās līdz pat JDK 6 virkņu pūls atradās PermGen (pastāvīgās paaudzes) telpā. Bet JDK 7 tas tiek pārvietots uz galveno kaudzes apgabalu.
Nemaināma virkne Java
Java valodā virkņu objekti ir nemainīgi. Nemainīgs vienkārši nozīmē nemodificējams vai negrozāms. Kad virknes objekts ir izveidots, tā datus vai stāvokli nevar mainīt, bet tiek izveidots jauns virknes objekts.
Zemāk ir tēmas īstenošana:
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); } }>
Izvade
Sachin>
Šeit Sachin netiek mainīts, bet tiek izveidots jauns objekts ar Sachin Tendulkar. Tāpēc virkne ir pazīstama kā nemainīga.
Kā redzams dotajā attēlā, tiek izveidoti divi objekti, bet atsauces mainīgais joprojām attiecas uz Sachin, nevis uz Sachin Tendulkar. Bet, ja mēs to skaidri piešķiram atsauces mainīgajam, tas atsauksies uz Sachin Tendulkar objektu.
Piemēram:
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); } }>
Izvade
Sachin Tendulkar>
Virknes atmiņas piešķiršana
Ikreiz, kad virknes objekts tiek izveidots kā literāls, objekts tiks izveidots virknes konstantes pūlā. Tas ļauj JVM optimizēt String literal inicializāciju.
Piemērs:
String demoString = 'Geeks';>
Virkni var arī deklarēt, izmantojot a jauns operators, t.i., dinamiski piešķirts. Ja virkne tiek dinamiski piešķirta, tām kaudzē tiek piešķirta jauna atmiņas vieta. Šī virkne netiks pievienota virknes konstantes pūlam.
Piemērs:
String demoString = new String('Geeks');>
Ja vēlaties saglabāt šo virkni pastāvīgajā pūlā, jums tā būs jāinternē.
Piemērs:
String internedString = demoString.intern(); // this will add the string to string constant pool.>
Ieteicams izmantot virknes literāļus, jo tas ļauj JVM optimizēt atmiņas piešķiršanu.
Piemērs, kas parāda, kā deklarēt virkni
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); } }>
Izvade
String name = techcodeview.com String newString = techcodeview.com>
Piezīme: Virknes objekts tiek izveidots apgabalā Heap, un burti tiek glabāti īpašā atmiņas apgabalā, kas pazīstams kā virkņu konstante baseins.
Kāpēc Stīgu baseins pārcēlās no PermGen uz uz normāls kaudzes laukums?
PermGen vieta ir ierobežota, noklusējuma izmērs ir tikai 64 MB. tā bija problēma, izveidojot un saglabājot pārāk daudz virkņu objektu PermGen telpā. Tāpēc Stīgu baseins tika pārvietots uz lielāku kaudzes laukumu. Lai padarītu Java efektīvāku atmiņu, tiek izmantots jēdziens virknes literāls. Izmantojot atslēgvārdu “jauns”, JVM izveidos jaunu virknes objektu parastajā kaudzes apgabalā, pat ja virkņu pūlā atrodas tas pats virknes objekts.
Piemēram:
String demoString = new String('Bhubaneswar');>
Apskatīsim koncepciju ar Java programmu un vizualizēsim faktisko JVM atmiņas struktūru:
Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.
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); } }>
Izvade
TAT TAT TAT TAT>

Stīgu baseins Java valodā
Piezīme: Visi Java objekti tiek glabāti kaudzē. Atsauces mainīgais ir uz objektu, kas tiek glabāts kaudzes apgabalā, vai arī tie var būt ietverti citos objektos, kas tos arī ievieto kaudzes apgabalā.
1. piemērs:
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); } }>
Izvade
GFG FG>
2. piemērs:
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); } }>
Izvade
Gfg Gfg>
bieži uzdotie jautājumi
1. Kas ir virknes Java?
Virknes ir objektu veidi, kuros var saglabāt rakstzīmes kā elementus.
2. Kāpēc virkņu objekti Java ir nemainīgi?
Tā kā java izmanto jēdzienu virkne literāls. Pieņemsim, ka ir 5 atsauces mainīgie, visi attiecas uz vienu objektu Sachin. Ja viens atsauces mainīgais maina objekta vērtību, to ietekmēs visi atsauces mainīgie. Tāpēc stīgu objekti Java ir nemainīgi.
3. Kāpēc Java izmanto jēdzienu virknes literāls?
Lai padarītu Java efektīvāku atmiņu (jo netiek izveidoti jauni objekti, ja tas jau pastāv virknes konstantes pūlā).