logo

Stygos Java

Pateiktame pavyzdyje bus sukurtas tik vienas objektas. Pirma, JVM neras jokio eilutės objekto su reikšme Sveiki atvykę eilučių konstantų telkinyje, todėl sukurs naują objektą. Po to jis telkinyje suras eilutę su reikšme Sveiki atvykę, nesukurs naujo objekto, bet grąžins nuorodą į tą patį egzempliorių. Šiame straipsnyje mes sužinosime apie „Java“ eilutes.

Kas yra „Java“ eilutės?

Stygos yra objektai, kuriuose galima saugoti reikšmių simbolius, o Java programoje kiekvienas simbolis saugomas 16 bitų, ty naudojant UTF 16 bitų kodavimą. Eilutė veikia taip pat kaip simbolių masyvas Java.



Pavyzdys:

String name = 'Geeks';>
Eilučių pavyzdys Java

Eilučių pavyzdys Java

Žemiau pateikiamas „Java“ eilutės pavyzdys:



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);  } }>

Išvestis
example>

Stygos kūrimo būdai

Yra du būdai „Java“ sukurti eilutę:

  • Styga Literal
  • Naudojant naują raktinį žodį

Sintaksė:

 = '';>

1. Styginių pažodinis

Kad „Java“ būtų efektyvesnė atmintis (nes nekuriami nauji objektai, jei jis jau yra eilučių pastoviame telkinyje).



Pavyzdys:

String demoString = techcodeview.com;>

2. Naujo raktinio žodžio naudojimas

  • Styga s = new String(Sveiki atvykę);
  • Tokiu atveju JVM sukurs naują eilutės objektą įprastoje (ne telkinio) krūvos atmintyje, o pažodinis sveikinimas bus įtrauktas į eilučių pastovų telkinį. Kintamasis s nurodys objektą krūvoje (ne telkinys)

Pavyzdys:

vlc atsisiųsti youtube
String demoString = new String (techcodeview.com);>

Sąsajos ir klasės „Java“ eilutėse

CharBuffer : Ši klasė įgyvendina CharSequence sąsają. Ši klasė naudojama simbolių buferiams leisti vietoje CharSequences. Tokio naudojimo pavyzdys yra reguliarios išraiškos paketas java.util.regex.

Styga : Tai simbolių seka. „Java“ programoje String objektai yra nekintantys, o tai reiškia konstantą ir jų negalima keisti, kai jie yra sukurti.

CharSequence sąsaja

CharSequence sąsaja naudojama simbolių sekai pavaizduoti Java.
Klasės, kurios įdiegtos naudojant CharSequence sąsają, yra paminėtos toliau ir suteikia daug funkcijų, tokių kaip poeilutė, paskutinis įvykis, pirmasis įvykis, sujungimas , toupper, tolower ir kt.

  1. Styga
  2. StringBuffer
  3. StringBuilder

1. Styga

Styga yra nekintanti klasė, kuri reiškia konstantą ir negali būti pakeista vieną kartą, o jei norime pakeisti, turime sukurti naują objektą ir netgi jo teikiamas funkcijas, tokias kaip toupper, tolower ir tt, visa tai grąžina naują objektą, jo nekeičia originalus objektas. Jis automatiškai apsaugotas nuo siūlų.

kaip konvertuoti int į java eilutę

Sintaksė

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

2. StringBuffer

StringBuffer yra bendraamžių klasė Styga , jis yra kintamo pobūdžio ir yra saugios gijos klasė, ją galime naudoti, kai turime kelių gijų aplinką ir bendrinamą eilutės buferio objektą, ty naudojamą kelių gijų. Kadangi jis yra saugus gijai, todėl yra papildomų išlaidų, todėl jis daugiausia naudojamas kelių gijų programoms.

Sintaksė:

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

3. StringBuilder

StringBuilder „Java“ yra alternatyva „String“ ir „StringBuffer“ klasei, nes sukuria kintamą simbolių seką ir ji nėra saugi. Jis naudojamas tik sriegio viduje, todėl nėra papildomų išlaidų, todėl jis daugiausia naudojamas vienos gijos programoms.

Sintaksė:

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

StringTokenizatorius

StringTokenizatorius „Java“ klasė naudojama eilutei suskaidyti į žetonus.

Pavyzdys:

String Tokenizer Java

StringTokenizer objektas viduje išlaiko esamą padėtį eilutėje, kuri turi būti ženklinama. Kai kurios operacijos perkelia šią dabartinę padėtį už apdorotų simbolių. Žetonas grąžinamas paimant eilutės, kuri buvo naudojama kuriant StringTokenenizer objektą, poeilutė.

StringJoiner yra klasė in java.util paketas, naudojamas sudaryti simbolių (eilučių), atskirtų skyrikliu ir pasirinktinai pradedant pateiktu priešdėliu ir baigiant pateiktu priesaga, seką. Nors tai taip pat galima padaryti naudojant „StringBuilder“ klasę, kad po kiekvienos eilutės būtų pridėtas skyriklis, „StringJoiner“ suteikia paprastą būdą tai padaryti be daug kodo įrašymo.

Sintaksė:

public StringJoiner(CharSequence delimiter)>

Aukščiau matėme, kad galime sukurti eilutę pagal String Literal.

String demoString =Sveiki atvykę;

Čia JVM tikrina stygų pastovų telkinį. Jei eilutė neegzistuoja, sukuriamas naujas eilutės egzempliorius ir įtraukiamas į telkinį. Jei eilutė egzistuoja, ji nesukurs naujo objekto. Atvirkščiai, jis grąžins nuorodą į tą patį atvejį. Talpykla, kurioje saugomi šie eilučių egzemplioriai, yra žinoma kaip eilutės pastovus telkinys arba eilučių baseinas. Ankstesnėse „Java“ versijose iki JDK 6 stygų baseinas buvo „PermGen“ (nuolatinės kartos) erdvėje. Tačiau JDK 7 jis perkeliamas į pagrindinę krūvos sritį.

Nekintama eilutė Java

Java kalboje styginių objektai yra nekintantys. Nekintama tiesiog reiškia nekeičiamą arba nekeičiamą. Sukūrus eilutės objektą, jo duomenų arba būsenos pakeisti negalima, tačiau sukuriamas naujas eilutės objektas.

java interviu klausimai

Žemiau pateikiamas temos įgyvendinimas:

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);  } }>

Išvestis
Sachin>

Čia Sachin nekeičiamas, o sukuriamas naujas objektas su Sachin Tendulkar. Štai kodėl eilutė yra žinoma kaip nekintanti.

Kaip matote pateiktame paveikslėlyje, sukuriami du objektai, tačiau atskaitos kintamasis vis tiek nurodo Sachiną, o ne Sachin Tendulkar. Bet jei mes jį aiškiai priskirsime atskaitos kintamajam, jis nurodys Sachin Tendulkar objektą.

prime be kodo java

Pavyzdžiui:

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);  } }>

Išvestis
Sachin Tendulkar>

Stygos atminties paskirstymas

Kai eilutės objektas sukuriamas kaip literalas, objektas bus sukurtas eilutės konstantų telkinyje. Tai leidžia JVM optimizuoti String literal inicijavimą.

Pavyzdys:

String demoString = 'Geeks';>

Eilutę taip pat galima deklaruoti naudojant a naujas operatorius, ty dinamiškai paskirstytas. Jei eilutės yra dinamiškai paskirstytos, joms priskiriama nauja atminties vieta krūvoje. Ši eilutė nebus įtraukta į eilutės konstantų telkinį.

Pavyzdys:

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

Jei norite saugoti šią eilutę nuolatiniame telkinyje, turėsite ją internuoti.

Pavyzdys:

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

Pageidautina naudoti eilučių literalius, nes tai leidžia JVM optimizuoti atminties paskirstymą.

Pavyzdys, rodantis, kaip deklaruoti eilutę

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);  } }>

Išvestis
String name = techcodeview.com String newString = techcodeview.com>


Pastaba: Styginių objektas sukuriamas Krūvos srityje, o Literalai saugomi specialioje atminties srityje, vadinamoje stygų pastoviu telkiniu.

Kodėl styginių baseinas persikėlė iš PermGen į į normalus krūvos plotas?

PermGen vieta yra ribota, numatytasis dydis yra tik 64 MB. tai buvo problema kuriant ir išsaugant per daug styginių objektų PermGen erdvėje. Štai kodėl styginių baseinas buvo perkeltas į didesnį krūvos plotą. Kad „Java“ būtų efektyvesnė atmintis, naudojama eilutės literato sąvoka. Naudodamas raktinį žodį „naujas“, JVM sukurs naują eilutės objektą įprastoje krūvos srityje, net jei tas pats eilutės objektas yra eilučių telkinyje.

niūrūs nuliai

Pavyzdžiui:

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

Pažvelkime į koncepciją naudodami „Java“ programą ir įsivaizduokime tikrąją JVM atminties struktūrą:

Žemiau pateikiamas pirmiau minėto metodo įgyvendinimas:

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);  } }>

Išvestis
TAT TAT TAT TAT>
Styginių baseinas Java kalba

Styginių baseinas Java kalba

Pastaba: Visi Java objektai saugomi krūvoje. Nuorodos kintamasis yra objektas, saugomas krūvos srityje, arba jie gali būti kituose objektuose, todėl jie taip pat patenka į krūvos sritį.

1 pavyzdys:

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);  } }>

Išvestis
GFG FG>

2 pavyzdys:

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);  } }>

Išvestis
Gfg Gfg>

Dažnai užduodami klausimai

1. Kas yra „Java“ eilutės?

Stygos yra objektų tipai, kuriuose simboliai gali būti saugomi kaip elementai.

2. Kodėl styginių objektai yra nekintami Java?

Kadangi java naudoja eilučių literalą. Tarkime, kad yra 5 atskaitos kintamieji, visi nurodo vieną objektą Sachin. Jei vienas atskaitos kintamasis pakeičia objekto reikšmę, jį paveiks visi atskaitos kintamieji. Štai kodėl styginių objektai yra nekintami Java.

3. Kodėl Java naudoja eilučių literalo sąvoką?

Kad „Java“ būtų efektyvesnė atmintis (nes nekuriami nauji objektai, jei jis jau yra eilučių pastoviame telkinyje).