Forskellen mellem String og StringBuffer Class i Java
Indhold
String og StringBuffer er begge de klasser, der opererer på strenge. StringBuffer-klassen er peer-klassen i klassen String. Formålet med strengklassen er af fast længde. Objektet med StringBuffer-klassen kan dyrkes. Den grundlæggende forskel mellem String og StringBuffer er, at genstanden for "String" -klassen er uforanderlige. Formålet med klassen “StringBuffer” foranderlig.
- Sammenligningstabel
- Definition
- Vigtige forskelle
- Konklusion
Sammenligningstabel
Grundlag for sammenligning | Snor | StringBuffer |
---|---|---|
Grundlæggende | Længden af strengobjektet er fast. | Længden af StringBuffer kan øges. |
Modifikation | Strengeobjekt er uforanderligt. | StringBuffer-objekt er mutabelt. |
Ydeevne | Det er langsommere under sammenkædning. | Det er hurtigere under sammenkædning. |
Hukommelse | Forbruger mere hukommelse. | Forbruger mindre hukommelse. |
Opbevaring | String konstant pool. | Heap Memory. |
Definition af streng
“String” er en klasse i Java. Objektet med klassen streng er af fast længde, og vigtigst at huske, objektet med strengklassen er "uforanderlig". Når du initialiserer strengobjektet, kan du ikke ændre det objekt igen. Objektet med klassen String gemmes i String konstant pool.
Lad os først forstå, at når du opretter en streng; du opretter et objekt af typen streng. Strengekonstanterne er også strengobjekter.
System.out.ln ("Hej, dette er Teckpix-løsning");
I ovenstående udsagn er strengen "Hej dette er Teckpix Solution" en strengkonstant.
Lad os nu forstå stringensobjektets mutabilitet ved hjælp af et eksempel.
String str = ny streng ("Teckpix"); str.concat ( "opløsning"); system.out.ln (str); // output Teckpix
I ovenstående kode forsøgte jeg at sammenkæde de to strenge "Teckpix" og "Solution". Som vi ved, når der oprettes en streng, betyder det, at objektet af typen Streng oprettes. Derfor opretter strengen "Teckpix" et objekt, hvis reference er tildelt strengobjektet "str". Dernæst forsøgte jeg at sammenkæde en anden streng “Solution” med strengen “Teckpix” ved hjælp af metoden “concat ()” i klassen String.
Da strengobjekterne er uforanderlige, foretages der ingen ændringer af strengen "Teckpix", og den nye streng "Løsning" opretter et andet objekt i strengkonstantpuljen. Men henvisningen til objektet “Løsning” fanges ikke af noget objekt, hvorfor henvisningen til objekt Løsning går tabt, selvom den stadig er til stede i strengkonstantpuljen. Da der ikke foretages nogen ændring af objektet Teckpix, vil jeg kun strengen “Teckpix”, når jeg objektstrengen, som jeg tildelte referencen til Teckpix tidligere.
Definition af StringBuffer
Klassen “StringBuffer” er peer-klassen for klassen “String”. Klassen StringBuffer giver strengene mere funktionalitet. Objektet i StringBuffer-klassen er mutabelt, dvs. dets objekt kan ændres. Længden af StringBuffer-objektet kan dyrkes. Du kan indsætte tegnene eller underdelene i midten af den bogstavelige streng, der er tildelt StringBuffer-objektet eller i slutningen af det. StringBuffer tildeler plads til 16 ekstra tegn, når der ikke kræves nogen specifik længde.
Lad os forstå mutingen af StringBuffer-objektet ved hjælp af et eksempel:
StringBuffer Sb = new StringBuffer ("Teckpix"); Sb.append ( "Løsning"); system.out.ln (Sb); // Output Teckpix-løsning
Som vi ved, at StringBuffer-objektet er mutabelt. Metoden append () ændrer StringBuffer-objektet Sb, som oprindeligt henvises til objektet ”Teckpix” tidligere. Metoden append () tilføjer den nye streng bogstavelige "Løsning" til slutningen af streng bogstavelige "Teckpix". Når jeg nu objektet Sb, vil det det ændrede strengobjekt "Teckpix Solutions".
- Længden af strengobjektet er fast, men længden på et objekt i StringBuffer kan øges, når det er nødvendigt.
- String-objekt er uforanderligt, dvs. det kan ikke tildeles igen, mens StringBuffer-objektet kan ændres.
- Strengeobjekt er langsommere i ydelsen, mens StringBuffer-objektet er hurtigere.
- Strengobjekt bruger mere hukommelse, mens StringBuffer-objekter bruger mindre hukommelse.
- Strengobjekter gemmes i en konstant pulje, mens StringBuffer-objekter gemmes i bunkehukommelsen.
Konklusion:
StringBuffer-objekter giver strengene mere funktionalitet sammenlignet med klassen String. Derfor foretrækkes det at arbejde med StringBuffer i stedet for klasse String.