StringBuilder kontra StringBuffer
Avveininger knyttet til trådsikkerhet
StringBuilder kontra StringBuffer er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.
To foranderlige klasser
Java har to foranderlige strengklasser: StringBuilder og StringBuffer. API-ene deres er nesten identiske, men de skiller seg på ett avgjørende punkt: trådsikkerhet.
Samme API
Begge klassene tilbyr append, insert, delete, reverse og resten. Kode som bruker den ene, kan vanligvis bytte til den andre ved å bare endre typenavnet.
public class Main {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello").append(", ").append("World");
System.out.println(sb);
}
}StringBuffer er synkronisert
Metodene i StringBuffer er synkroniserte, noe som betyr at flere tråder trygt kan endre samme instans. Denne sikkerheten har en liten ytelseskostnad.
public class Main {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("thread-safe");
buffer.append("!");
System.out.println(buffer);
}
}StringBuilder er ikke synkronisert
StringBuilder hopper over synkronisering, noe som gjør den raskere. Ulempen er at det ikke er trygt å dele én instans mellom tråder uten koordinering utenfra.
public class Main {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("fast");
builder.append("!");
System.out.println(builder);
}
}Når du bør bruke StringBuilder
Bruk StringBuilder i det vanlige tilfellet: når du bygger strenger inne i én enkelt metode eller tråd. Dette er standardvalget i nesten all vanlig kode.
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append("#");
}
System.out.println(sb);
}
}Når du bør bruke StringBuffer
Velg StringBuffer bare når den samme builder-instansen faktisk deles og endres av flere tråder. Dette er sjeldent i praksis.
public class Main {
public static void main(String[] args) {
StringBuffer shared = new StringBuffer("log: ");
shared.append("event A; ");
shared.append("event B");
System.out.println(shared);
}
}Lokale variabler deles ikke
En builder som bare deklareres og brukes inne i én metode, er aldri synlig for andre tråder, så StringBuilder er alltid riktig der. Manglende synkronisering kan ikke forårsake problemer.
public class Main {
static String build() {
StringBuilder sb = new StringBuilder();
sb.append("local only");
return sb.toString();
}
public static void main(String[] args) {
System.out.println(build());
}
}Ytelsesforskjell
Synkroniseringskostnaden i StringBuffer gjør den tregere ved entrådet bruk. For tette løkker gir StringBuilder bedre ytelse.
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
sb.append('x');
}
System.out.println("Built length: " + sb.length());
}
}Historisk merknad
StringBuffer kom først, i Javas tidlige historie. StringBuilder ble lagt til i Java 5 som det usynkroniserte og raskere alternativet for det vanlige entrådede tilfellet.
Velg riktig
La StringBuilder være standardvalget. Bytt bare til StringBuffer når De kan bevise at én enkelt instans deles mellom tråder. Ellers betaler De for sikkerhet De ikke trenger.
public class Main {
public static void main(String[] args) {
StringBuilder result = new StringBuilder();
result.append("Use StringBuilder ").append("by default");
System.out.println(result);
}
}Begge konverterer til String
Begge klassene produserer en uforanderlig String gjennom toString(). Valget mellom dem påvirker bare oppbyggingen, ikke sluttresultatet.
public class Main {
public static void main(String[] args) {
String a = new StringBuilder("one").toString();
String b = new StringBuffer("two").toString();
System.out.println(a + " " + b);
}
}Kort sjekk
Hva er hovedforskjellen mellom StringBuilder og StringBuffer?
Oppsummering
De har lært om avveiningene:
- Begge har nesten identiske API-er
StringBufferer synkronisert (trådsikker, tregere)StringBuilderer usynkronisert (raskere)- La
StringBuildervære standardvalget ved entrådet oppbygging - Bruk
StringBufferbare for instanser som faktisk deles
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 104
- Leksjoner
- 374
Ofte stilte spørsmål
Er leksjonen «StringBuilder kontra StringBuffer» gratis?
Ja – hele teksten i «StringBuilder kontra StringBuffer» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «StringBuilder kontra StringBuffer»?
Avveininger knyttet til trådsikkerhet Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Java Academy?
Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «StringBuilder kontra StringBuffer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?
Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Hvorfor strenger er uforanderlige
- Bygge strenger med StringBuilder
- StringBuilder-metoder
- StringBuilder kontra StringBuffer