strings in java verpönt?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

hab da mal ne Frage zum Thema Strings...
viele behaupten, dass Strings in java verpönt sind... so nach dem Motto, bloß nicht zuviele String-Objekte im Programm usw......

Warum wird das gesagt und wie macht man es richtig??? z.B. Soll man StringBuffer nehmen und append für's konkatenieren anstatt string + string + string ...

ist das einfach nur auf die string-objekt anzahl bezogen oder wie soll ich das verstehen??
 
M

maki

Gast
Gerüchte...

Nimm einfach String +, wenn's zu lange dauert kannst du immer noch optimieren, lesbarkeit ist meist wichtiger.
 

tfa

Top Contributor
Anstatt + in Schleifen zu verwenden, sollte man möglichst einen StringBuilder nehmen. Ansonsten ist die Aussage "strings in java verpönt" Blödsinn.
 
O

OneAndZero

Gast
Der Müde Joe hat recht, auch rein aus SQM Sicht ist die Aussage von maki nicht sehr possitiv zu werten.
Natürlich kann man Strings mit + konkatenieren, sollte man jedoch immer darauf achten wie groß und umfangreich ein Projekt wird.
Und das mit der Lesbarkeit ist reine Geschmackssache!
 
G

Guest

Gast
Hat aber auch etwas mit dem Heap zu tun ...
Meiner Meinung nach sind StringBuffer für so etwas besser geignet da der Heap
dann nicht "zumüllt" weil jeder neue veränderte String ja neu angelegt werden muss.
Ein Buffer ist meist automatisch so groß dimensioniert sodass dieses Problem meistens
umgangen wird.
Bei kleinen Programmen ist dies wohl eher egal aber bei großen kann es schon
zu Leistungseinbrüchen kommen.
Von daher lieber gleich den String Buffer benutzen.
 

tfa

Top Contributor
OneAndZero hat gesagt.:
Der Müde Joe hat recht, auch rein aus SQM Sicht ist die Aussage von maki nicht sehr possitiv zu werten.
Natürlich kann man Strings mit + konkatenieren, sollte man jedoch immer darauf achten wie groß und umfangreich ein Projekt wird.
Und das mit der Lesbarkeit ist reine Geschmackssache!
Dir ist schon klar, dass die Konkatenation mit + vom Compiler in nichts anderes als StringBuilder (bzw. früher StringBuffer) umgewandelt wird? Und was hat das mit QM zu tun?
 
M

maki

Gast
Der Müde Joe hat gesagt.:
http://books.google.ch/books?id=ZZOiqZQIbRMC&pg=PA155&lpg=PA155&dq=effective+java+string&source=bl&ots=UZM29viI75&sig=mWWP2oKx2avbXJ0_zqhWREc8wrw&hl=de&sa=X&oi=book_result&resnum=3&ct=result#PPA155,M1
Ist veraltet, stammt noch aus der Zeit als der Javacomiler nicht optimiert hat.

auch rein aus SQM Sicht ist die Aussage von maki nicht sehr possitiv zu werten.
Was ist SQM?

Natürlich kann man Strings mit + konkatenieren, sollte man jedoch immer darauf achten wie groß und umfangreich ein Projekt wird.
Lustigerweise macht der Compiler dass schon ganz von selbst.
Aber natürlich nicht mit dem hier erwähnten StringBuffer, da dieser veraltet ist, StringBuilder ist angesagt.

Und das mit der Lesbarkeit ist reine Geschmackssache!
Manche Leute haben einen komischen Geschmack..

.append()
vs.
+

tfa hatte schon die Ausnahme erwähnt, nämlich in Schleifen.

Hatten das Thema hier schon oft, einfach mal suchen, da hatte ich schon einen Link gepostet in dem erklärt wird warum man sich mit "manuellen" Optimierungen zurückhalten soltle, solange man keine Performanceproblöme hat.

Dieser Thread ist aber ein schönes Beispiel wie lange sich Gerüchte halten, liegt wohl daran dass Leute gerne nachplappern als selbst zu testen bzw. nachzuforschen ;)
 
G

Gast

Gast
Unter einem Anfängerforum erwarte ich einfach ein Grundverständnis für Leute, die nicht den ganzen Tag zu Hause rumimplementieren und programmieren vielleicht nur als hobby ansehen ... soviel zum thema forschen ...

am besten wir forschen alle nur noch bis wir nicht mehr forschen können.. anstatt auch mal zu kommunizieren .... :) viel zu viele fuzzis an den heimischen pc's kriegen die zähne nicht mehr auseinander und halten sich für die größten ...

Niemand zwingt einen auf eine normal gestellte Frage zu antworten ;)
 
G

Guest

Gast
Gast hat gesagt.:
Unter einem Anfängerforum erwarte ich einfach ein Grundverständnis für Leute, die nicht den ganzen Tag zu Hause rumimplementieren und programmieren vielleicht nur als hobby ansehen ... soviel zum thema forschen ...

am besten wir forschen alle nur noch bis wir nicht mehr forschen können.. anstatt auch mal zu kommunizieren .... :) viel zu viele fuzzis an den heimischen pc's kriegen die zähne nicht mehr auseinander und halten sich für die größten ...

Niemand zwingt einen auf eine normal gestellte Frage zu antworten ;)

Falls du der Ersteller des Threads bist, solltest du dir vielleicht nochmal alle Antworten durchlesen. Deine Frage wurde normal und zufriedenstellend beantwortet.
Und makis letzter Post galt nicht dir (mit dem forschen und nachplappern).
 
M

maki

Gast
>> Und makis letzter Post galt nicht dir (mit dem forschen und nachplappern).

Vielleciht sollte ich doch etwas höflicher schreiben...
 

Wildcard

Top Contributor
maki hat gesagt.:
Ist veraltet, stammt noch aus der Zeit als der Javacomiler nicht optimiert hat.
String + String ist noch genauso grausam wie schon vor Jahren. Klar wird mittlerweile StringBuilder verwendet, aber im Gegensatz zum Programmierer, kann der Compiler den richtigen Initialisierungszeitpunkt nicht finden.

Einfaches Beispiel (und jeder weiß wie wenig ich von Mikro Benchmarks halte, aber in diesem Fall ist der Unterschied einfach zu gravierend).

Erste Variante:
Code:
public class Test
{
    static int width = 20000;


    public static void main(String[] args)
    {
        long stamp = System.currentTimeMillis();
        StringBuilder s = new StringBuilder(10000);
        for (int i = 0; i < width; i++ )
        {
            s.append(i);
        }
        System.out.println(System.currentTimeMillis() - stamp);
    }
    
}
Dauert (dank Messungenauigkeit) 0ms.

Zweite Variante:

Code:
public class Test
{
    static int width = 20000;


    public static void main(String[] args)
    {
        long stamp = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < width; i++ )
        {
            s += i;
        }
        System.out.println(s);
        System.out.println(System.currentTimeMillis() - stamp);

    }
    
}

Dauert runde 5 Sekunden. Super optimiert :toll:
 
G

Gast

Gast
Ach Wildcard, die Ausnahme der Schleife wurde doch schon mehrfach erwähnt ;)

Ansonsten gibt es doch keinen Grund so etwas zu schreiben:
Code:
"1".append("2").append("3");
Wenn es doch auch so geht:
Code:
"1"+"2"+"3";
und zwar ohne Performanceeinbussen ;)
 

ARadauer

Top Contributor
tfa hat gesagt.:
OneAndZero hat gesagt.:
Der Müde Joe hat recht, auch rein aus SQM Sicht ist die Aussage von maki nicht sehr possitiv zu werten.
Natürlich kann man Strings mit + konkatenieren, sollte man jedoch immer darauf achten wie groß und umfangreich ein Projekt wird.
Und das mit der Lesbarkeit ist reine Geschmackssache!
Dir ist schon klar, dass die Konkatenation mit + vom Compiler in nichts anderes als StringBuilder (bzw. früher StringBuffer) umgewandelt wird? Und was hat das mit QM zu tun?

das wär mir neu...
 

Noctarius

Top Contributor
Also ich behaupte auch der Java Compiler ist einer der itelligentesten wenns ums Optimieren von Sourcecode geht, aber dass er aus einen + - Konkatinator einen StringBuilder macht wäre auch mir neu aber das könnte man im Sourcecode vom Compiler nachsehen ;)
 

Noctarius

Top Contributor
Ok kann ich machen und wenn mein Bytecode anders aussehen sollte als deiner, weil du:
1. eine andere javac Version benutzt
2. z.B. nicht unter einem 64Bit Linux arbeitest (und somit die SUN VM toll arbeitet - ich benutz für GUI Anwendungen die IBM Version - ergo anderes javac)
3. du Kaffe oder was auch immer benutzt

Sich auf "Etwas" zu verlassen, dass nicht 100% klar definiert ist halte ich für reine Faulheit - sorry aber so sehe ich das ^^

Wenn du dem Compiler sagst was er machen soll, bekommst du auch in jedem Fall das gewünschte Ergebnis.

Aber abgesehen davon finde ich persönlich auch oft ein + übersichtlicher als ewiges append(...).

Kommt auch ein wenig auf die Anwendung an ob es wirklich einen merklichen Unterschied macht oder nicht.
 

Wildcard

Top Contributor
Noctarius hat gesagt.:
Also ich behaupte auch der Java Compiler ist einer der itelligentesten wenns ums Optimieren von Sourcecode geht, aber dass er aus einen + - Konkatinator einen StringBuilder macht wäre auch mir neu aber das könnte man im Sourcecode vom Compiler nachsehen ;)
Welche Wahl gibt es denn noch? Nur noch String#concat, in beiden Fällen wäre eine Umwandlung notwendig und es kommt sowieso fast auf das Gleiche raus.
 

Noctarius

Top Contributor
Um das Thema von neulich aufzugreifen:
Java native Implementierung der Runtime ;) Die sieht bei IBM bestimmt an einigen Stellen anders aus als bei SUN *einfach mal so behauptet* *gg*
 

Wildcard

Top Contributor
Noctarius hat gesagt.:
Java native Implementierung der Runtime ;) Die sieht bei IBM bestimmt an einigen Stellen anders aus als bei SUN *einfach mal so behauptet* *gg*
Klar sieht die anders aus. Genaus wie zig andere VMs anders aussehen. Hat damit aber null komma nichts zu tun. Nach dem kompilieren gibt es kein String + String mehr, dass muss auf Klassen und Methoden der J2SE umgebogen werden, sonst würde ein IBM Kompilat ja auf keiner anderen VM mehr funkionieren und dann dürfte es sich auch nicht mehr Java Compiler nennen.
 

tfa

Top Contributor
Noctarius hat gesagt.:
Ok kann ich machen und wenn mein Bytecode anders aussehen sollte als deiner, weil du:
1. eine andere javac Version benutzt
2. z.B. nicht unter einem 64Bit Linux arbeitest (und somit die SUN VM toll arbeitet - ich benutz für GUI Anwendungen die IBM Version - ergo anderes javac)
3. du Kaffe oder was auch immer benutzt
Ich versteh jetzt dein Problem nicht. Davon abgesehen, dass es kaum andere Möglichkeiten für eine Stringkonkatenation gibt (siehe Wildcard), ist mir noch nie ein Compiler untergekommen, der das anders macht. Selbst jikes zu Java 1.1-Zeiten arbeitete so. Das ist natürlich kein Beweis, dass das immer so sein muss. ABer wieso sollte man die einfachste (und bewährte) Methode ändern?
Sich auf "Etwas" zu verlassen, dass nicht 100% klar definiert ist halte ich für reine Faulheit - sorry aber so sehe ich das ^^

Wenn du dem Compiler sagst was er machen soll, bekommst du auch in jedem Fall das gewünschte Ergebnis.
Ich verlass mich nur darauf, dass String + String genau das macht, was in der JLS steht.
Aber abgesehen davon finde ich persönlich auch oft ein + übersichtlicher als ewiges append(...).
Das sehe ich absolut genau so.
 

homer65

Top Contributor
Ich mache meistens auch String x += String y. Mag sein, das sowas nicht so performant ist. Aber meistens sind es doch nur Performance Peanuts. Kommt halt drauf an.
 

didjitalist

Bekanntes Mitglied
wie schon oft genug erwähnt in diesem thread, man sollte immer dann auf StringBuilder setzen, wenn man strings innerhalb einer schleife zusammensetzt. für alle anderen zwecke ist String + String gut genug, wenn nicht sogar in der performance identisch.
 

Noctarius

Top Contributor
tfa hat gesagt.:
Noctarius hat gesagt.:
Ok kann ich machen und wenn mein Bytecode anders aussehen sollte als deiner, weil du:
1. eine andere javac Version benutzt
2. z.B. nicht unter einem 64Bit Linux arbeitest (und somit die SUN VM toll arbeitet - ich benutz für GUI Anwendungen die IBM Version - ergo anderes javac)
3. du Kaffe oder was auch immer benutzt
Ich versteh jetzt dein Problem nicht. Davon abgesehen, dass es kaum andere Möglichkeiten für eine Stringkonkatenation gibt (siehe Wildcard), ist mir noch nie ein Compiler untergekommen, der das anders macht. Selbst jikes zu Java 1.1-Zeiten arbeitete so. Das ist natürlich kein Beweis, dass das immer so sein muss. ABer wieso sollte man die einfachste (und bewährte) Methode ändern?
Sich auf "Etwas" zu verlassen, dass nicht 100% klar definiert ist halte ich für reine Faulheit - sorry aber so sehe ich das ^^

Wenn du dem Compiler sagst was er machen soll, bekommst du auch in jedem Fall das gewünschte Ergebnis.
Ich verlass mich nur darauf, dass String + String genau das macht, was in der JLS steht.
Aber abgesehen davon finde ich persönlich auch oft ein + übersichtlicher als ewiges append(...).
Das sehe ich absolut genau so.

Kein Problem - nur keine feststehende Definition, dass genau das hier behauptete rauskommen muss. Wenns einer nativ in seiner VM implementiert tut er es eben. Es steht im vollkommen frei. Möglich dass auch alle derzeit intern auf StringBuilder (bzw früher StringBuffer) zurückgreifen, aber da es nicht klar von SUN so definiert ist (bzw in einem JCR) kann man halt nicht zwangsweise davon ausgehen, dass es so sein muss.

Und das IBM das anders macht hab ich nicht behauptet, ich habe lediglich gesagt, dass es hier anders sein könnte ;) Vergleich gibt's nicht weil ich mir den IBM VM Code noch nie angesehen habe. War lediglich ein Ansatzpunkt einer Erklärung.
 

Wildcard

Top Contributor
Nein. Das entscheidet nicht die VM, sondern der Compiler, und der muss gemäß Spezifikation kompatiblen Bytecode produzieren, da SUN sonst die Prozesskeule auspackt. Da hat sich schon Microsoft die Finger dran verbrannt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
L Java Strings Buchstaben vertauschen Java Basics - Anfänger-Themen 4
L Java Format Strings Java Basics - Anfänger-Themen 2
O Java - Strings Ver und Ent -schlüsseln Java Basics - Anfänger-Themen 3
D Java - Simple Strings in .txt loggen. Java Basics - Anfänger-Themen 4
T Java-Datenstruktur: zuweisen von Strings auf Listen von Strings Java Basics - Anfänger-Themen 10
H Warum sind in Java Strings und Arrays eigentlich unveränderlich? Java Basics - Anfänger-Themen 2
J Zeilenumbruch in Java zwischen zwei Strings Java Basics - Anfänger-Themen 6
T Substrings in Strings ersetzen ohne java.lang.String Java Basics - Anfänger-Themen 8
G Steuerzeichen in Java und Strings... Java Basics - Anfänger-Themen 5
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 10
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
B 4 Strings, Anfangsbuchstaben muss unterschiedlich sein Java Basics - Anfänger-Themen 12
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
B mir nur die Gesamtzahl von einzigartigen Strings aus Array ausgeben lassen Java Basics - Anfänger-Themen 5
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
C 2 Strings Java Basics - Anfänger-Themen 15
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
javaerd Wie kann ich Brute Force Methode mit Strings erweitern Java Basics - Anfänger-Themen 1
R Erste Schritte Strings "einrücken" Java Basics - Anfänger-Themen 3
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
B gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben Java Basics - Anfänger-Themen 5
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
L Werte von Strings ? Java Basics - Anfänger-Themen 1
L Strings und Arrays - Expand Java Basics - Anfänger-Themen 12
I Schachbrett aus beliebigen Strings erstellen Java Basics - Anfänger-Themen 3
Syncopated Pandemonium Verketten von Strings funktioniert nicht Java Basics - Anfänger-Themen 4
F Wahrscheinlichkeit von Strings Java Basics - Anfänger-Themen 3
MiMa Splitten eines Strings Java Basics - Anfänger-Themen 5
T Hashfunktion für Strings Java Basics - Anfänger-Themen 3
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben