Option 1:
%Vor%Option 2:
%Vor%Welche Option ist besser in Bezug auf Leistung, Gedächtnis und allgemeine Praxis? Was sind einige empfohlene Tools / Möglichkeiten, die ich verwenden kann, um die Speichernutzung meines Codes und seiner Leistung zu messen (neben dem Messen der Startzeit und der Endzeit und Berechnen der Differenz)
Der erste wird:
%Vor%Der zweite wird:
%Vor%Hier ist die Demontage:
%Vor%Es wird keinen merklichen Unterschied zwischen beiden geben. Verwenden Sie, was Sie am logischsten und lesbar finden. Ich würde
verwenden %Vor%Der erste wird:
%Vor%Der zweite wird:
%Vor%Hier ist die Demontage:
%Vor%Option 1:
%Vor%Option 2:
%Vor%Welche Option ist besser in Bezug auf Leistung, Gedächtnis und allgemeine Praxis? Was sind einige empfohlene Tools / Möglichkeiten, die ich verwenden kann, um die Speichernutzung meines Codes und seiner Leistung zu messen (neben dem Messen der Startzeit und der Endzeit und Berechnen der Differenz)
Unter der Annahme, dass someString konstant ist, sind beide konstante Ausdrücke und werden zur Kompilierzeit ausgewertet. Sie werden zu identischen Klassendateien und Laufzeitverhalten führen.
Quelle: Die Java-Sprachspezifikation schreibt :
Ein kompilierbarer Konstantenausdruck ist ein Ausdruck, der einen Wert des primitiven Typs oder eines Strings angibt, der nicht abrupt beendet wird und nur mit folgendem Aufbau verwendet wird:
Literale des primitiven Typs und Literale des Typs String (§3.10.1, §3.10.2, §3.10.3, §3.10.4, §3.10.5)
Die additiven Operatoren %code% und %code% (§15.18)
...
Kompilierzeitkonstantenausdrücke vom Typ String werden immer "interniert", um eindeutige Instanzen mit der Methode String.intern zu teilen.
Wenn someString keine Konstante ist, verwenden die meisten modernen Compiler einen StringBuilder, der explizit erlaubt durch die Java-Sprachspezifikation:
Das Ergebnis der String-Verkettung ist eine Referenz auf ein String-Objekt, das die Verkettung der beiden Operanden-Strings darstellt. Die Zeichen des linken Operanden stehen vor den Zeichen des rechten Operanden in der neu erzeugten Zeichenkette.
Das String-Objekt wird neu erstellt (§12.5), es sei denn, der Ausdruck ist ein kompilierbarer Konstantenausdruck (§15.28).
Eine Implementierung kann Konvertierung und Verkettung in einem Schritt ausführen, um zu vermeiden, dass ein intermediäres String-Objekt erstellt und dann verworfen wird. Um die Leistung wiederholter Zeichenfolgenverkettung zu erhöhen, kann ein Java-Compiler die StringBuffer-Klasse oder eine ähnliche Technik verwenden, um die Anzahl der zwischengeordneten String-Objekte zu reduzieren, die durch Auswertung eines Ausdrucks erstellt werden.
Bei primitiven Typen kann eine Implementierung auch die Erstellung eines Wrapperobjekts optimieren, indem sie direkt von einem primitiven Typ in eine Zeichenfolge konvertiert.
Wenn Sie eine Zeichenfolge verketten, erstellen Sie bei jeder Verkettung eine neue Kopie der Zeichenfolge, und beide Zeichenfolgen werden jeweils um ein Zeichen kopiert. Dies führt zu einer zeitlichen Komplexität von O (n 2) (McDowell).
Wenn Sie die Leistung verbessern möchten, verwenden Sie
%Vor%Einer seiner Konstruktoren hat die folgende Syntax:
%Vor%StringBuilder (veränderbare Zeichenfolge. Denken Sie daran, dass Strings unveränderbar sind) hilft, dieses Problem zu lösen, indem Sie einfach ein resizierbares Array aller Strings erstellen. kopiert sie nur bei Bedarf wieder in einen String (McDowell).
%Vor%Referenz:
McDowell, Gayle Laakmann. Cracking Das Coding Interview, 6. Auflage. Drucken.
"Stringbuilder (Java Platform SE 8)". Docs.oracle.com. N.p., 2016. Web. 4. Juni 2016.
Unter der Annahme, dass someString konstant ist, sind beide konstante Ausdrücke und werden zur Kompilierzeit ausgewertet. Sie werden zu identischen Klassendateien und Laufzeitverhalten führen.
Quelle: Die Java-Sprachspezifikation schreibt :
Ein kompilierbarer Konstantenausdruck ist ein Ausdruck, der einen Wert des primitiven Typs oder eines Strings angibt, der nicht abrupt beendet wird und nur mit folgendem Aufbau verwendet wird:
Literale des primitiven Typs und Literale des Typs String (§3.10.1, §3.10.2, §3.10.3, §3.10.4, §3.10.5)
Die additiven Operatoren
+
und-
(§15.18)...
Kompilierzeitkonstantenausdrücke vom Typ String werden immer "interniert", um eindeutige Instanzen mit der Methode String.intern zu teilen.
Wenn someString keine Konstante ist, verwenden die meisten modernen Compiler einen StringBuilder, der explizit erlaubt durch die Java-Sprachspezifikation:
Das Ergebnis der String-Verkettung ist eine Referenz auf ein String-Objekt, das die Verkettung der beiden Operanden-Strings darstellt. Die Zeichen des linken Operanden stehen vor den Zeichen des rechten Operanden in der neu erzeugten Zeichenkette.
Das String-Objekt wird neu erstellt (§12.5), es sei denn, der Ausdruck ist ein kompilierbarer Konstantenausdruck (§15.28).
Eine Implementierung kann Konvertierung und Verkettung in einem Schritt ausführen, um zu vermeiden, dass ein intermediäres String-Objekt erstellt und dann verworfen wird. Um die Leistung wiederholter Zeichenfolgenverkettung zu erhöhen, kann ein Java-Compiler die StringBuffer-Klasse oder eine ähnliche Technik verwenden, um die Anzahl der zwischengeordneten String-Objekte zu reduzieren, die durch Auswertung eines Ausdrucks erstellt werden.
Bei primitiven Typen kann eine Implementierung auch die Erstellung eines Wrapperobjekts optimieren, indem sie direkt von einem primitiven Typ in eine Zeichenfolge konvertiert.
Wenn Sie eine Zeichenfolge verketten, erstellen Sie bei jeder Verkettung eine neue Kopie der Zeichenfolge, und beide Zeichenfolgen werden jeweils um ein Zeichen kopiert. Dies führt zu einer zeitlichen Komplexität von O (n 2) (McDowell).
Wenn Sie die Leistung verbessern möchten, verwenden Sie
%Vor%Einer seiner Konstruktoren hat die folgende Syntax:
%Vor%StringBuilder (veränderbare Zeichenfolge. Denken Sie daran, dass Strings unveränderbar sind) hilft, dieses Problem zu lösen, indem Sie einfach ein resizierbares Array aller Strings erstellen. kopiert sie nur bei Bedarf wieder in einen String (McDowell).
%Vor%Referenz:
McDowell, Gayle Laakmann. Cracking Das Coding Interview, 6. Auflage. Drucken.
"Stringbuilder (Java Platform SE 8)". Docs.oracle.com. N.p., 2016. Web. 4. Juni 2016.
Tags und Links string java concatenation primitive