Concat eine Ganzzahl zu einem String - verwenden Sie String-Literal oder Primitive aus Sicht der Leistung und des Arbeitsspeichers?

8

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)

    
user1739658 08.02.2013, 23:07
quelle

5 Antworten

10

Der erste wird:

%Vor%

Der zweite wird:

%Vor%

Hier ist die Demontage:

%Vor%     
Mikhail Vladimirov 08.02.2013 23:13
quelle
6

Es wird keinen merklichen Unterschied zwischen beiden geben. Verwenden Sie, was Sie am logischsten und lesbar finden. Ich würde

verwenden %Vor%     
JB Nizet 08.02.2013 23:11
quelle
3
___ answer14782852 ___

Es wird keinen merklichen Unterschied zwischen beiden geben. Verwenden Sie, was Sie am logischsten und lesbar finden. Ich würde

verwenden %Vor%     
___ answer14782877 ___

Der erste wird:

%Vor%

Der zweite wird:

%Vor%

Hier ist die Demontage:

%Vor%     
___ qstnhdr ___ Concat eine Ganzzahl zu einem String - verwenden Sie String-Literal oder Primitive aus Sicht der Leistung und des Arbeitsspeichers? ___ qstntxt ___

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)

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer14782918 ___

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.

    
___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ tag123concatenation ___ Bezeichnet das Verbinden von zwei oder mehr Elementen zu einem einzelnen Element. ___ answer37631802 ___

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.

    
___ tag123primitive ___ Ein primitiver Typ ist ein Datentyp, der von einer Programmiersprache als Grundbaustein bereitgestellt wird. ___
Simon 08.02.2013 23:12
quelle
1

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.

    
meriton 08.02.2013 23:16
quelle
0

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.

    
fonji 04.06.2016 15:15
quelle