Ich verwende fast immer StringBuilder (int), um alberne Neuzuweisungen mit der kleinen Standardkapazität zu vermeiden. Hat irgendeine Javac-Implementierung etwas Spezielles, um eine angemessene Kapazität für implizite Anwendungen von StringBuilder in der Verkettung zu verwenden? Würde "abcdefghijklmnopqrstuvwxyz" + numbers + "!.?:"
mindestens eine Anfangskapazität von 30 Literlängen verwenden?Implizite StringBuilder Größe
Antwort
Ja, es wird so intelligent sein - intelligenter, tatsächlich - in Java 9. (Dies ist etwas, das ich lose behaupten kann, ich war ein Teil von - I made der ursprüngliche Vorschlag, StringBuilders presize, und das inspiriert die bessere, leistungsfähigere Ansatz, die sie endete.)
http://openjdk.java.net/jeps/280 erwähnt speziell unter anderem, dass "manchmal müssen wir den StringBuilder angemessen presize", und das ist eine spezifische Verbesserung vorgenommen wird.
(Und die Moral von der Geschichte ist, Ihren Code zu schreiben, wie einfach und lesbar wie möglich und lassen Sie die Compiler und JIT der Optimierungen sorgen dafür, dass richtig ihre Arbeit sind.)
Dies kann auf Ihrem Compiler abhängen Version, Einstellungen usw.
Um dies zu testen, habe ich eine einfache Methode:
public static void main(String[] args) {
System.out.println("abcdefghijklmnopqrstuvwxyz" + args[0] + "!.?:");
}
und nach dem Kompilieren und dann durch einen Decompiler ausgeführt wird, erhalten wir das folgende Ergebnis:
System.out.println((new StringBuilder()).append("abcdefghijklmnopqrstuvwxyz").append(args[0]).append("!.?:").toString());
Es scheint also, dass zumindest bei einigen Javac-Versionen nur der Standard verwendet wird.
Die manuelle Überprüfung des Bytecodes zeigt das Gleiche an.
- 1. StringBuilder Einfügemethode
- 2. Implizite Konvertierungen und implizite Klassen
- 3. Scala testet implizite implizite Parameter?
- 4. StringBuilder vs XmlTextWriter
- 5. Warum StringBuilder nicht druckt?
- 6. Wie StringBuilder Obj wiederverwenden?
- 7. Stringbuilder als out-Parameter
- 8. StringBuilder in SQLiteDatabase speichern
- 9. StringBuilder und Kapazität?
- 10. InputSource mit StringBuilder?
- 11. java outOfMemoryError mit stringbuilder
- 12. Stringbuilder in CIL (MSIL)
- 13. StringBuilder in Stream schreiben
- 14. Streamwriter vs StringBuilder
- 15. StringBuilder in Flex
- 16. Ein StringBuilder Objekt entsorgen
- 17. StringBuilder Linien entfernen
- 18. Wiederverwenden StringBuilder und ArrayIndexOutOfBoundsException
- 19. StringBuilder und Radiobuttonlist
- 20. Stringbuilder und Arrays
- 21. StringBuilder AppendFormat mit @
- 22. StringBuilder und String-Gleichheitsprüfung
- 23. Format Struktur für StringBuilder
- 24. Wie ist der RAM-Verbrauch von StringBuilder?
- 25. Sind implizite Parameterwerte implizite Werte selbst?
- 26. Implizite Klasse vs Implizite Umwandlung in Eigenschaft
- 27. Dart-Entsprechung für Java's StringBuilder
- 28. StringBuilder mehrfach verwendet funktioniert nicht
- 29. Reverse pinvoke char * [] mit StringBuilder
- 30. StringBuilder in sichere Zeichenfolge konvertieren