Hirdetés

Keresés

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

  • WonderCSabo
    félisten

    (#4241) Superhun : sb.replace(0,sb.length,"x"); Tudom nem szép....

    (#4243) modder : Nyilván mindenre azt lehet mondani, hogy "attól függ..."
    Én alapvetően erre a helyzetre akartam reagálni.:
    String s = "egy";
    ...
    s = "ketto"; // innentől kezdve ott ül a memóriában elérhetetlenül, hogy "egy" ami majd egyszer ki lesz takarítva.
    Amíg ez egyszer van addig oké nem nagy érvágás...de alkalmazás szinten már halmozódhat a dolog. Nem törvényszerű nyilván...

    A példa amit írtál az kicsit erőltetett...egy szóval nem mondtam, hogy String helyett általánosan StringBuilder-t kell használni...pláne nem olyan helyzetben amit vázoltál. Ha tudom, hogy lesz egy szövegem ami nem fog megváltozni akkor persze String, de ha valamivel "műveleteket" szeretnék végezni akkor StringBuilder.

    Tévedsz, Javában a string literálok nem úgy műkődnek, mint az egyéb sima objektumok. Ezek egy String poolba kerülnek. Amikor létrehozol egy új string literált, akkor a JVM megnézi, hogy benne van-e már az a string a poolban, és ha igen, akkor nem hoz létre új objektumot, hanem egyszerűen referál a már meglévőre. A garbage collector ezeket a stringeket nem is fogja bántani csak úgy, különben elveszik az újrafelhasználás lehetősége.

    A StringBuildert pedig nem kell feltétlenül használni, mert egyrészt sokkal természetesebb a plusz operátor, másrészt úgyis StringBuilderre fordul a + operátor...

  • Superhun
    addikt

    (#4241) Superhun : sb.replace(0,sb.length,"x"); Tudom nem szép....

    (#4243) modder : Nyilván mindenre azt lehet mondani, hogy "attól függ..."
    Én alapvetően erre a helyzetre akartam reagálni.:
    String s = "egy";
    ...
    s = "ketto"; // innentől kezdve ott ül a memóriában elérhetetlenül, hogy "egy" ami majd egyszer ki lesz takarítva.
    Amíg ez egyszer van addig oké nem nagy érvágás...de alkalmazás szinten már halmozódhat a dolog. Nem törvényszerű nyilván...

    A példa amit írtál az kicsit erőltetett...egy szóval nem mondtam, hogy String helyett általánosan StringBuilder-t kell használni...pláne nem olyan helyzetben amit vázoltál. Ha tudom, hogy lesz egy szövegem ami nem fog megváltozni akkor persze String, de ha valamivel "műveleteket" szeretnék végezni akkor StringBuilder.

    sb.replace(0,sb.length,"x")

    Ekkor is létrehozol egy "x" (vagy akármi más) tartalmú String objektumot. Tény, hogy utána a régi literált nem kell GC-zni, mert egyszerűen felülcsapja az új literállal a karaktertömbjét, de ha picit utánaolvasol annak, hogy mi az a PermGen, akkor rájössz, hogy alapesetben a régi Stringet sem fogja megenni a GC. Annyit értél el az egésszel, hogy rondább lett a kód. ;)

  • modder
    aktív tag

    (#4241) Superhun : sb.replace(0,sb.length,"x"); Tudom nem szép....

    (#4243) modder : Nyilván mindenre azt lehet mondani, hogy "attól függ..."
    Én alapvetően erre a helyzetre akartam reagálni.:
    String s = "egy";
    ...
    s = "ketto"; // innentől kezdve ott ül a memóriában elérhetetlenül, hogy "egy" ami majd egyszer ki lesz takarítva.
    Amíg ez egyszer van addig oké nem nagy érvágás...de alkalmazás szinten már halmozódhat a dolog. Nem törvényszerű nyilván...

    A példa amit írtál az kicsit erőltetett...egy szóval nem mondtam, hogy String helyett általánosan StringBuilder-t kell használni...pláne nem olyan helyzetben amit vázoltál. Ha tudom, hogy lesz egy szövegem ami nem fog megváltozni akkor persze String, de ha valamivel "műveleteket" szeretnék végezni akkor StringBuilder.

    és hogyan olvasod ki az értékét? toString() -gel...

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