Suositeltava, 2024

Toimituksen Valinta

Merkkijonon ja StringBuffer-luokan ero Java: ssa

String ja StringBuffer ovat molemmat luokkia, jotka toimivat merkkijonoina. StringBuffer-luokka on luokan Stringin vertaisluokka. String-luokan kohde on kiinteä. StringBuffer-luokan kohde on kasvava. Perusero String- ja StringBufferin välillä on, että ”String” -luokan kohde on muuttumaton . Luokan “StringBuffer” kohde muuttuu .

Vertailukaavio

Vertailun perusteetjonoStringBuffer
perustiedotString-objektin pituus on kiinteä.StringBufferin pituus voi kasvaa.
muutosString-objekti on muuttumaton.StringBuffer-objekti on muuttuva.
EsitysSe on hitaampi yhdistyksen aikana.Se on nopeampi yhdistyksen aikana.
MuistiKuluttaa enemmän muistia.Kuluttaa vähemmän muistia.
varastointiString-vakio-allas.Heap muisti.

Merkkijonon määritelmä

“String” on Java-luokka. Luokan Stringin kohde on kiinteä, ja tärkeintä on muistaa, että String-luokan kohde on "muuttumaton". Kun olet alustanut String-objektin, et voi muuttaa tätä kohdetta uudelleen. Luokan String-objekti tallennetaan String-vakio-pooliin.

Ymmärtäkäämme ensin, että kun luot jokin merkkijono; luodaan tyypin merkkijonon objekti. Merkkijonot ovat myös merkkijonoja.

 System.out.println ("Hei tämä on Teckpix-ratkaisu"); 

Yllä olevassa lausunnossa merkkijono “Hello this is Teckpix Solution” on merkkijonon vakio.

Ymmärtäkää nyt merkkijono-objektin mutaalisuus esimerkin avulla.

 String str = uusi merkkijono ("Teckpix"); str.concat ( "ratkaisu"); system.out.println (str); // lähtö Teckpix 

Yllä olevassa koodissa yritin yhdistää kaksi merkkijonoa "Teckpix" ja "Solution". Kuten tiedämme aina, kun luodaan merkkijono, luodaan merkkijonon tyyppi. Täten merkkijono “Teckpix” luo objektin, jonka viittaus on osoitettu merkkijonolle ”str”. Seuraavaksi yritin yhdistää toisen merkkijonon "Solution" merkkijonolla "Teckpix" käyttämällä luokan String "concat ()" -menetelmää.

Kun String-esineet ovat muuttumattomia, merkkijonoon "Teckpix" ei tehdä muutoksia, ja uusi merkkijono "Solution" luo jonkun toisen objektin merkkijonon vakioalueelle. Mutta viittaus objektiin "Solution" ei jää minkään kohteen kohteeksi, joten viittaus objektiin Ratkaisu häviää, vaikka se on edelleen olemassa merkkijonon vakio-poolissa. Koska mitään Teckpix-objektin muokkausta ei tehdä, kun tulostan objektin, jolle aiemmin annoin Teckpix-viitteen, tulostan vain merkkijonon "Teckpix".

Määritelmä StringBuffer

Luokka “StringBuffer” on luokan “String” vertaisluokka. Luokka StringBuffer tarjoaa merkkijonoille enemmän toimintoja. StringBuffer-luokan kohde on muuttuva, koska sen kohdetta voidaan muokata. StringBuffer-objektin pituus on kasvava. Voit lisätä merkkijonon tai merkkijonon merkkijonon keskelle, joka on määritetty StringBuffer-objektille tai sen lopussa. StringBuffer jakaa tilaa 16 lisämerkille, kun tiettyä pituutta ei pyydetä.

Ymmärtäkää StringBuffer-objektin mutaatiota esimerkin avulla:

 StringBuffre Sb = uusi StringBuffer ("Teckpix"); Sb.append ( "ratkaisu"); system.out.println (Sb); // Lähtö Teckpix -ratkaisu 

Kuten tiedämme, StringBuffer-objekti on muuttuva. Menetelmän lisäys () muuttaa StringBuffer-objektia Sb, johon aluksi kohteen Teckpix viite on määritetty aikaisemmin. Menetelmän lisäys () lisää uuden merkkijonon "Ratkaisu" merkkijonon "Teckpix" loppuun. Nyt kun tulostan kohteen Sb, se tulostaa muutetun merkkijonon "Teckpix Solutions".

Merkkijonon ja StringBufferin keskeinen ero

  1. Stringobjektin pituus on kiinteä, mutta StringBuffer-objektin kohteen pituus voi kasvaa tarvittaessa.
  2. String-objekti on muuttumaton eli sen objektia ei voi määrittää uudelleen, kun taas StringBufferin objekti on muuttuva.
  3. Stringobjekti on suorituskyvyssä hitaampi, kun taas StringBuffer-objekti on nopeampi.
  4. String-objekti kuluttaa enemmän muistia, kun taas StringBuffer-objektit kuluttavat vähemmän muistia.
  5. Stringobjektit tallennetaan vakio-altaaseen, kun taas StringBuffer-objektit tallennetaan kasanmuistiin.

johtopäätös:

StringBuffer-objektit tarjoavat merkkijonoille enemmän toimintoja kuin luokan String. Näin ollen on suositeltavaa työskennellä StringBufferin kanssa luokan Stringin sijasta.

Top