codegenic skrev:
Opgaven lød som følger: opret en int variabel med en værdi mellem 1 og 10. Få derefter udskrevet hvad værdien er.
Så har du løst opgaven som jeg ser det.
1. Du opretter en integer og tildeler den en værdi.
2. Du udskriver din integers værdi.
codegenic skrev:
Greb den som en switch med cases og tænkte at jeg blot kunne kunne genbruge min int i syso, i stedet for manuelt at anføre tallet der svarer til den case, som efterprøves. Altså, "værdien er ", + mitTal og ikke "værdien er 4". Men ved ikke om det fylder mere i hukommelsen end bare at køre den med strings rent.
Om du skriver
Kode: Vælg alt
System.out.println("text: " + mitTal);
// eller
System.out.println("text: 1");
Gør ingen forskel i forhold til hvor mange bytes hver string fylder i RAM.
Forskellen i dette scenarie er at i den første sysout laver Java to (2) string objekter da strings er "immutable".
Så når du skriver "text1" + "text2" eller "text1" + mitTal, så laver Java to (2) string objekter for at kunne knytte dem sammen.
Det er ret langsomt, giver et større overhead for GC (garbage collection), bruger flere CPU cycles og fylder mere i RAM.
I den anden sysout laver Java et enkelt string object for at udskrive "text: 1", hvilket er acceptabelt i dette scenarie med et switch statement.
MEN! Hvis du nu skulle udskrive adskillige linjer hvor du ikke skulle kunne se det du udskriver med det samme så er et StringBuilder objekt vejen frem.
StringBuilder laver kun to (2) objekt for hundredevis eller tusindevis af strings via append()
Kode: Vælg alt
StringBuilder sb = new StringBuilder();
sb.append(string 1);
sb.append(string 2);
sb.append(string 3);
sb.append(string 4);
System.out.println(sb);
1. Objekt for StringBuilder
2. Objekt for toString() af StringBuilder
Så forskellen imellem
1: "text: 1"
2: "text: " + mitTal
Er at 2 opretter dobbelt så mange String objekter som 1 og placere dem i RAM, hvilket bruger flere resourcer i både
storage (RAM) og CPU.
Noter. I StringBuilder append skal du selv skrive et linjeskift f.eks
Kode: Vælg alt
String newline = System.getProperty("line.separator");
StringBuilder sb = new StringBuilder();
sb.append(string1);
sb.append(newline);
// eller
sb.append(string2 + newline);
sb.append(string3);
sb.append(string4);
System.out.println(sb);