Performancefrage zu "else if" und "||"

Status
Nicht offen für weitere Antworten.

DP

Top Contributor
Hi. Was ist wohl performanter:

Code:
if(a.equals("a")){
}
else if(a.equals("b")){
}
else if(a.equals("c")){
}
else{
}

oder

Code:
if(a.equals("a")){
}
else if(a.equals("b") || a.equals("c")){
}
else{
}

Oder kommt das beim Compiler auf's gleiche hinaus?

Danke.
 

bambi

Bekanntes Mitglied
kannst's ja mal testen - wenn du glueck hast, dann bekommst du 'ne ms unterschied raus...

mal abgesehen davon, dass der code nicht ganz 100%ig das gleiche macht (kommt auf den inhalt in den bloecken an) ist 2tens schoenerer stil, oder? sieht auf jedenfall besser aus - uebersichtlicher. :toll:
 
B

Beni

Gast
Da bei einem || nicht immer beide Seiten ausgewerted werden, würd ich jetzt einfach mal von "gleichschnell" ausgehen.

Das mit dem switch kannst du mal probieren, bin gespannt was du für ein Ergebnis bekommst. Nur schon ein if mit char und == müsste schneller als das equals sein (ein paar Methodenaufrufe weniger...).
 

Bleiglanz

Gesperrter Benutzer
DP hat gesagt.:
Hi. Was ist wohl performanter:

Code:
if(a.equals("a")){
}
else if(a.equals("b")){
}
else if(a.equals("c")){
}
else{
}

oder

Code:
if(a.equals("a")){
}
else if(a.equals("b") || a.equals("c")){
}
else{
}

Oder kommt das beim Compiler auf's gleiche hinaus?

Danke.
Wohl kaum, weil die beiden Codeblöcke eine unterschiedliche Programmlogik darstellen (oben wird genau eine der drei Möglichkeiten gewählt, unten im Fall b oder c nur ein Zweig)

Was performanter ist, ist ziemlich egal (auf heutigen Maschinen bestimmt nicht messbar...), in deinem Fall würde ich aber trotzdem einen switch(a.charAt(0)) machen...
 

DP

Top Contributor
Bleiglanz hat gesagt.:
Wohl kaum, weil die beiden Codeblöcke eine unterschiedliche Programmlogik darstellen (oben wird genau eine der drei Möglichkeiten gewählt, unten im Fall b oder c nur ein Zweig)

das stimmt schon, jedoch ist in dem ersten ab equals("b") für 30 fälle immer das gleiche im block.

wg. messbar oder nicht: in einer kette von operationen, die hintereinander ablaufen und der user sekündlich auf feedback wartet, kommt es schon auf eine sekunde an...

gut, bei den rechnern heute kann man ruhig performance- und resourcenhungrig programmieren. aber dann sind imho die ganzen performance-ratschläge für'n arsch bzw. haben für kaufmännische anwendungen kaum nährwert - im gegensatz zu einem 8kb-megademo ;)

aber danke, ich nehme die switch-variante.
 

Bleiglanz

Gesperrter Benutzer
wg. messbar oder nicht: in einer kette von operationen, die hintereinander ablaufen und der user sekündlich auf feedback wartet, kommt es schon auf eine sekunde an...
schon klar, aber hast du dir schon mal überlegt, wieviele
Code:
"meinstring".equals(wasanderes)
//
switch(x){....}
du in einer einzigen Sekunde ausführen kannst?

Fast immer kommt IN den Zweigen viel Code, und diesen zu optimieren ist viel wichtiger als solche Mikrosekunden-Randphänome
 

Illuvatar

Top Contributor
DP hat gesagt.:
wg. messbar oder nicht: in einer kette von operationen, die hintereinander ablaufen und der user sekündlich auf feedback wartet, kommt es schon auf eine sekunde an...

gut, bei den rechnern heute kann man ruhig performance- und resourcenhungrig programmieren. aber dann sind imho die ganzen performance-ratschläge für'n #####(zensiert)

1. Nun ja, da gehts aber nicht um 1 Sekunde, sondern um höchstens 1 Millisekunde. Wenn die aber eh alle das gleiche machen, würde ich dir aber schon vom Stil her zum || raten.

2. Also zumindest die String-Concatenation Sache mit dem StringBuffer sollte man auf keinen Fall vernachlässigen, z.B. hab ich irgendwann mal ne größere Internetseite mir in einen String speichern wollen mit +=, das hat eine knappe Minute gedauert. Mit nem StringBuffer warens dann noch paar Sekunden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
A Performancefrage Allgemeine Java-Themen 24
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
M Variablen If - Else Wiederholungsfehler Allgemeine Java-Themen 3
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
O Darstellung von else if anweisung im struktogramm? Allgemeine Java-Themen 1
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
K Eclipse Alternativkonstrukte (Verzweigungen: if, switch,else..) Allgemeine Java-Themen 4
D if - else Baum vereinfachen Allgemeine Java-Themen 4
S Else-Anweisung Problem Allgemeine Java-Themen 17
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
M if - else Abfrage beenden Allgemeine Java-Themen 4
M if, else, etc. als Membervariablen? Allgemeine Java-Themen 14
P if(a) else if (b) else if (c) . Frage Allgemeine Java-Themen 2
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
G switch case VS. if.else if Allgemeine Java-Themen 2
H if - else if-else bessere Lösung gesucht Allgemeine Java-Themen 4
H If anweisungen zu verschachtelt? else without if Allgemeine Java-Themen 8
G if . else ? Allgemeine Java-Themen 36

Ähnliche Java Themen

Neue Themen


Oben