Doporučená, 2024

Redakce Choice

Rozdíl mezi String a StringBuffer třídou v Javě

String a StringBuffer jsou třídy, které fungují na řetězcích. Třída StringBuffer je třída peer třídy String. Objekt třídy String má pevnou délku. Objekt třídy StringBuffer je růstový. Základní rozdíl mezi String a StringBuffer je, že objekt třídy String je neměnný . Objekt třídy „StringBuffer“ se změnil .

Srovnávací graf

Základ pro porovnáníŘetězecStringBuffer
ZákladníDélka objektu String je pevná.Délka StringBufferu může být zvýšena.
ModifikaceString objekt je neměnný.Objekt StringBuffer je mutovatelný.
VýkonBěhem zřetězení je pomalejší.Během zřetězení je rychlejší.
PaměťSpotřebovává více paměti.Spotřebovává méně paměti.
Úložný prostorString konstantní fond.Paměť haldy.

Definice řetězce

„String“ je třída v Javě. Objekt třídy String má pevnou délku a nejdůležitější pro zapamatování je, že objekt třídy String je „neměnný“. Jakmile inicializujete objekt String, nemůžete tento objekt znovu upravovat. Objekt třídy String je uložen ve fondu konstant String.

Nejdříve pochopíme, že kdykoliv vytvoříte nějaký řetězec; vytvoříte objekt typu řetězec. Řetězcové konstanty jsou také řetězcové objekty.

 System.out.println ("Ahoj to je Teckpix Solution"); 

Ve výše uvedeném tvrzení je řetězec „Ahoj to je Teckpix Solution“ Stringovou konstantou.

Nyní pojďme pochopit proměnlivost String objektu pomocí příkladu.

 String str = new String ("Teckpix"); str.concat ("Řešení"); system.out.println (str); // výstup Teckpix 

Ve výše uvedeném kódu jsem se pokusil spojit dva řetězce „Teckpix“ a „Solution“. Jak víme, kdykoliv je vytvořen řetězec, znamená to, že je vytvořen objekt typu String. Řetězec „Teckpix“ tedy vytvoří objekt, jehož odkaz je přiřazen objektu řetězce „str“. Dále jsem se pokusil zřetězit další řetězec „Solution“ s řetězcem „Teckpix“ pomocí metody „concat ()“ třídy String.

Vzhledem k tomu, že objekty String jsou neměnné, na řetězci „Teckpix“ se neprovádí žádná změna a nový řetězec „Solution“ vytvoří další objekt v oblasti konstant řetězců. Odkaz na objekt „Řešení“ však není zachycen žádným objektem, proto je odkaz na objektové řešení ztracen, i když je stále přítomen v řetězcové konstantní oblasti. Vzhledem k tomu, že na objektu Teckpix se neprovádí žádná úprava, když tisknu objekt str, ke kterému jsem přidělil odkaz Teckpix dříve, vytiskne pouze řetězec „Teckpix“.

Definice StringBuffer

Třída “StringBuffer” je třída peer třídy “String”. Třída StringBuffer poskytuje více funkcí řetězcům. Objekt třídy StringBuffer je mutable, který může být změněn. Délka objektu StringBuffer je růstová. Vložíte znaky nebo podřetězce do středu řetězcového literálu, který je přiřazen objektu StringBuffer nebo na jeho konci. StringBuffer přiděluje prostor pro 16 dalších znaků, pokud není požadována žádná konkrétní délka.

Pojďme pochopit proměnlivost objektu StringBuffer pomocí příkladu:

 StringBuffre Sb = new StringBuffer ("Teckpix"); Sb.append ("řešení"); system.out.println (Sb); // Výstup Teckpix Solution 

Jak víme, objekt StringBuffer je mutovatelný. Metoda append () modifikuje objekt StringBuffer Sb, na který byl původně přiřazen odkaz na objekt „Teckpix“. Metoda append () připojí nový řetězcový literál „Solution“ na konec řetězcového literálu „Teckpix“. Teď, když vytisknu objekt Sb, vytiskne upravený objekt řetězce „Teckpix Solutions“.

Klíčový rozdíl mezi řetězcem a StringBuffer

  1. Délka objektu String je pevná, ale délka objektu StringBuffer může být v případě potřeby zvýšena.
  2. String objekt je neměnný, to znamená, že objekt nemůže být znovu přiřazen, zatímco objekt StringBuffer je mutovatelný.
  3. Objekt String je ve výkonu pomalejší, zatímco objekt StringBuffer je rychlejší.
  4. Objekt String spotřebuje více paměti, zatímco objekty StringBuffer spotřebovávají méně paměti.
  5. Objekty řetězce jsou uloženy v konstantním fondu, zatímco objekty StringBuffer jsou uloženy v paměti haldy.

Závěr:

Objekty StringBuffer poskytují řetězcům více funkcí než třída String. Proto je vhodnější pracovat s StringBuffer namísto třídy String.

Top