Erste Schritte Switch case vs. Verschachtelte If Anweisung

Guten morgen liebes Forum,

ich hätte da mal eine Verständnisfrage.
Und zwar habe ich in meinem Buch gelesen, dass die switch case Funktion dasselbe macht wie verschachtelte if Anweisungen, nur halt übersichtlicher.
Ist das so richtig?
Ich mein wenn ja, dann wären ja alle verschachtelten if Anweisungen überflüssig da ich mit switch case mehr übersicht habe, oder sehe ich das Falsch?

Würde gerne eure Meinugn dazu hören und was ihr so bevorzugt.

Vielen Dank und einen schönen sonnigen Tag =)
 
Genau. switch-case ist eine andere Schreibweise für ein einfaches verschachteltes if. Allerdings kann es ja auch komplexere if-Abfragen geben, die dann nichtmehr durch ein switch-case abzubilden sind. Etwas folgendes Beispiel:

Java:
boolean condition1 = ...
if(condition1){
  // do something
}
else{
  ComplexObject obj = new ComplexObject(); //Teures Objekt
  if(obj.isConditonA()){
    // do A
  }
  else{
    // do B
  }
}

Somit bleibt switch-case eine übersichtliche Methode für einfache
Code:
if(){}else if(){}else{}
, kann aber wirklich komplexere if-Bäume (die zwischendurch bspw. auch mal ein Objekt erzeugen müssen) nicht abbilden.

Sparen kann man es sich also nicht, dennoch hat das switch-case seine Berechtigung. 😉
 
Genau. switch-case ist eine andere Schreibweise für ein einfaches verschachteltes if. Allerdings kann es ja auch komplexere if-Abfragen geben, die dann nichtmehr durch ein switch-case abzubilden sind. Etwas folgendes Beispiel:

Java:
boolean condition1 = ...
if(condition1){
  // do something
}
else{
  ComplexObject obj = new ComplexObject(); //Teures Objekt
  if(obj.isConditonA()){
    // do A
  }
  else{
    // do B
  }
}

Somit bleibt switch-case eine übersichtliche Methode für einfache
Code:
if(){}else if(){}else{}
, kann aber wirklich komplexere if-Bäume (die zwischendurch bspw. auch mal ein Objekt erzeugen müssen) nicht abbilden.

Sparen kann man es sich also nicht, dennoch hat das switch-case seine Berechtigung. 😉

Vielen dank für deine Antwort.
Also kann ich mir merken solange kein neues Objekt erzeugt wird bzw. werden muss kann ich switch case benutzen, ansonsten if else?

Gibt es eigentlich eine begrenzung wieviele case man benutzen kann oder ist das unendlich?
Bei if else kann ich ja verschachteln bis ich umfalle =)

Danke nochmal.
 
Moin,

Also kann ich mir merken solange kein neues Objekt erzeugt wird bzw. werden muss kann ich switch case benutzen, ansonsten if else?
Nein, so nicht!
Es hat nichts mit dem "Objekt erzeugen" zu tun, sondern mit der Verschachtelung !

Gibt es eigentlich eine begrenzung wieviele case man benutzen kann oder ist das unendlich?
Bei if else kann ich ja verschachteln bis ich umfalle =)
IMHO nicht wirklich ...

Es gibt zwei Vorteile von SWITCH:
- es ist (zumeist) im Code übersichtlicher
- es ist ggf. schneller
Nimm' mal an, du hast 100 Fälle, die unterschieden werden müssen und erst der 99. Fall ist der den du suchst. Beim if-else muss dann JEDE eine Bedingung geprüft werden, während das SWITCH (wohl bedingt durch entsprechende Optimierung durch dem Compiler) den gesuchten case schneller findet!
Siehe auch:
If-else vs switch ? Which is better? | Thread.currentThread().join()

Gruß
Klaus
 
Ein switch funktioniert zudem nur bei Integern / Strings bzw. Enums!
Boolsche werte o.ä werden im switch nicht zugelassen.

Nur der Vollständigkeit halber kannst du simple Bedingungen auch mit dem Tenären Operator lösen

Java:
public class Tenär {
	
	public Tenär(boolean value) {
	    
		String val = value == true ? "Der Test ist Bestanden" : "Der Test ist Fehlgeschlangen";
		
		/*
		 *Variable x = boolscher verleich (? 'dann') Wert wenn zutreffend (: 'ansonsten') Wert wenn nicht zutreffend
		 * 
		 * Obiges Konstrukt ersetzt eine einfache IF-ELSE Bedingung !
		 */
		
		System.out.println(val);
		
    }
	
	public static void main(String[] args) {
	    new Tenär(false);
    }

}
 
Zuletzt bearbeitet:
Mit Strings und Enums geht es ab Java7 !!

Davon das die Aktuellste Version verwendet wird bin ich nun einfach mal ausgegangen 😉

Man könnte auch Tricksen und einen Tenären Operator dem switch vorschalten der einen boolschen wert in einen Integer wandelt

Java:
int val = bool == true ? 1 : 0;

allerdings lohnt sich bei einem Fall mit lediglich 2 möglichen Werten der switch nicht ! 😀
 
Zuletzt bearbeitet:
Man sollte vielleicht noch ergänzen, dass, sobald man mehr als 5 Abfragen hat und dabei ist es egal ob if/else oder switch, man überlegen sollte das mit Schleifen zu lösen, sonst hat man einen Codesmell.

Gruß

Claus
 
Java:
int val = bool == true ? 1 : 0;
Auch beim Ternärern Operator gilt: Kein vergleich mit true/false, wenn die Variable schon ein boolean ist:
Java:
int val = bool ? 1: 0
Ist kürzer und imo auch lesbarer, da ==true oder ==false den Code doch schon kryptisch macht 😉
 
Zuletzt bearbeitet:
Was ganz vergessen wurde zu erwähnen:

Bei einem if/elseif Konstrukt, kann immer nur ein bestimmter Zweig/Block ausgeführt werden!
Bei einem switch können auch mehrere Fälle ausgeführt werden. Lässt man das "break;" oder "return;" bei einem Fall weg wird der nächste Fall ebenfalls ausgeführt.
 

Zurück
Oben