Ich glaube Erklärbär hat voellig recht. Glauben ist zwar gut, Wissen ist aber viel besser. Java ist Open Source.
aus java.lang.String:
...
/** The value is used for character storage. */
private final char value[];
...
public String(byte bytes[]) {
this(bytes, 0, bytes.length);
}
...
public String(byte bytes[], int offset, int length) {
checkBounds(bytes, offset, length);
char[] v = StringCoding.decode(bytes, offset, length);
this.offset = 0;
this.count = v.length;
this.value = v;
}
...
Alles anzeigen
Zitat von beat
...mach mir nur ein bissl sorgen um die Laufzeit da mein byte array sehr lang werden kann und da halt bei jeder iteration ein neues string objekt erstellt wird.
Wenn Du genau weisst (d.h. wenn du es getestest hast), das ein bestimmter Teil deines Codes fuer Dein fertiges Programm unzureichend langsam ist, dann optimiere ihn. Vorher ist Lesbarkeit immer wichtiger. Pre-Optimierung fuert nur zu komplexerem Code. Und der schadet Deinem Programm viel mehr als er ihm nutzt.
Es gibt natuerlich Faelle in denen man ziemlich genau weiss das der Code zu langsam laufen wird. Z.b. beim Verketten von Strings in Java mit dem '+' Operator:
Zitat von beat
frameContentAsString += Character.toString((char)frameContent[i]);
Vermeide den '+' operator, um viele generische Strings miteinander zu verbinden. Verwende stattdessen einen java.lang.StringBuilder oder einen java.lang.StringBuffer.
lass mal diesen Test laufen, das weisst Du warum:
public final class Test {
private final static int MAX = 50000;
private String test1(){
final StringBuilder sb = new StringBuilder();
for(int i=0;i<MAX;i++){
sb.append("X");
}
return sb.toString();
}
private String test2(){
String s = "";
for(int i=0;i<MAX;i++){
s += "X";
}
return s;
}
public static void main(String[] args) {
new Test().run();
}
private void run() {
long time = System.currentTimeMillis();
test1();
System.out.println("Time needed for test1: " + (System.currentTimeMillis() - time));
time = System.currentTimeMillis();
test2();
System.out.println("Time needed for test2: " + (System.currentTimeMillis() - time));
}
}
Alles anzeigen