Hirdetés

Keresés

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

  • Superhun
    addikt

    Nekem sem tiszta, mit akarsz pontosan, de lehet én vagyok lüke hozzá.

    Ez lehet az amire gondoltál szerintem:
    String result = title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    (role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change).toUpperCase();


    System.out.println(result);

    role1-től a change-ig minden nagybetűs a többit meg kicsiben hagyja a result Stringben.
    A toUpperCase() után oda lehet szúrni a toStrin()-et is de ez nem kötelező, anélkül is nagybetűsre alakítja.

    Karma hsz-e is hasznos. De szerintem még nem tartasz ott, hogy tud, ő miért javasolta a StringBuildert :) Bár az is, igaz, hogy inkább forciklusban használják a StringBuildert.

    Ennek oka röviden, hogy a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan. Ha úgy mond konketenálsz egy String-et akkor új String jön létre.
    role1 + "t" -> akkor ez egy új String objektum ami a memóriában van, és nem a régi módoítottad, ami szintén a memóriában van, és marad a program végéig! StringBuilder esetében pedig a régit tudod módosítani, és így csak String objektum van a memóriában. A JVM nem módosítja sosem a Stringeket, hanem újat hozz létre mindig! És ezzel eszi a memóriát. És ez azért is baj, mert a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket.
    Bár van egy előnye ennek, az ha mégegyszer egy ugyanolyan String objektum jön létre (ugyanaz az értéke), akkor a JVM nem hozz létre új Strng-et hanem egész egyszerűen már egy meglévőre hivatkozik.
    De ha tévedet, jönnek a többiek és nagy örömmel kijavítanak. :DDD

    "a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"

    Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben. ;)

    "a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket"

    Ezt nem gondolhatod komolyan. Elég sok alkalmazás kapna így out of memory-t :D. Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is. A futás időben keletkezett String objektumok viszont mindig a heap-re kerülnek, amiket pedig a GC eltakarít, ha már nincs rájuk hivatkozás.

    Példa:

    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1 == str2);

    Eredmény: true

    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1 == str2);

    Eredmény: false

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