Hirdetés

Keresés

Új hozzászólás Aktív témák

  • floatr
    veterán

    Sziasztok!

    Arra tudtok-e jó és megfelelő leírást, hogy meg tudjam jól tanulni, hogy miért érdemesebb StringBuilderrel .append()-olni a stringeket, mint hogy a '+' -al konkatenáljam össze őket? köszönöm

    Úgy tudom, hogy szűken 1-2 mondatban leírva az append azért jobb, mert nem hoz létre feleslegesen köztes objektumokat a memóriában mint a + csinál, ha például több String-et kell összefűznie. Ha például 4 stringet fűzössze + -al, akkor az első és másodikat összefűzi és lefoglal neki külön memóriát, majd ahhoz fűzi a 3.-at és annak is külön object-et foglal le, mielőtt a 4.-et hozzá fűzné.

    A String egy nem változtatható (immutable) típus. Nem tudsz hozzáadni, nem tudod kicserélni a betűket. Ha összefűzöl/összeadsz két String-et, akkor a JVM létrehoz egy újat a kettőből. Ha ezt a műveletet sokszor végzed el, erőforrás-pazarló és lassú lesz.
    A StringBuilder egy dinamikusan növekvő karaktertömb, aminek előre megmondhatod a kezdő kapacitását, mint egy puffer, aminek a mérete nőhet. Jó esetben nem is kell növelni, ha elég nagy puffert foglaltál le neki. Az összefűzést úgy kezeli, hogy a hozzáadott karaktereket egyenként pakolja a pufferbe, aztán a a toString() metódus hívásakor készít belőle egy végleges értéket.

    Ha konstansokat fűzöl össze összeadással, azt a compiler kioptimalizálja, de bizonyos esetekben helyettesíti StringBuilder-rel is.

  • Sirpi
    senior tag

    Sziasztok!

    Arra tudtok-e jó és megfelelő leírást, hogy meg tudjam jól tanulni, hogy miért érdemesebb StringBuilderrel .append()-olni a stringeket, mint hogy a '+' -al konkatenáljam össze őket? köszönöm

    Úgy tudom, hogy szűken 1-2 mondatban leírva az append azért jobb, mert nem hoz létre feleslegesen köztes objektumokat a memóriában mint a + csinál, ha például több String-et kell összefűznie. Ha például 4 stringet fűzössze + -al, akkor az első és másodikat összefűzi és lefoglal neki külön memóriát, majd ahhoz fűzi a 3.-at és annak is külön object-et foglal le, mielőtt a 4.-et hozzá fűzné.

    Ja, pont amiatt, amit mondasz. Viszont futtasd le ezt a két ciklust külön-külön és nem kell más magyarázat:

    String resultString = "";
    for (int i = 0; i < 1000000; i++) {
    resultString += "a";
    }

    StringBuilder resultStringBuilder = new StringBuilder();
    for (int i = 0; i < 1000000; i++) {
    resultStringBuilder.append("a");
    }

Új hozzászólás Aktív témák