Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt?

klhlubek

Mitglied
hi Leute,
ich hätte da eine Frage, und zwar, warum die Datentypen byte, short, char und "String" ( Ist ja eigt. kein Datentyp, sondern ein unveränderbares ( implementieren die Schnittstelle immutable ) Objekt), die Wrapper Klassen Byte, Short, Character, Integer und die enum- Aufzählung als Entscheidungsvariable erlaubt sind, aber NICHT die long, float und double etc. Werte.
Ich habe diese Kombination von genau diesen erlaubten Datentypen schon mehrmals gesehen und deswegen frage ich euch jetzt, woran denn das liegt ( Vielleicht an den Bytes, die sie einnehmen, dass genau diese nicht funktionieren.
 
Zuletzt bearbeitet von einem Moderator:
char bzw short könnte zu wenig sein, aber mehr als 4294967296 verschiedene Fälle (int) will hoffentlich niemand bereitstellen. char, byte und short können problemles als int interpretiert werden. Float und Double passen da nicht ins Schema .... das man sich dafür entschieden hat auch enums und Strings zu akzeptieren liegt vermutlich einfach daran, dass die User es haben wollen und um besser lesbaren Code zu ermöglichen. Gleitkommazahlen machen als Entscheidungskriterium meiner Meinung nach auch nicht viel Sinn, da man damit ohnehin nicht exakt rechnen kann.
Aber das ist auch alles nur gemutmaßtes Blabla...
 
Primitive Typen sind double, int, char, byte (..) - String ist kein primitiver Typ.

Switch macht doch nur Sinn für einen sehr eingeschränkten Wertebereich. Daher macht es keinen Sinn auf long o.ä. zu switchen. Abgesehen davon läufst du früher oder später in die Problematik mit Runden bei Fließkommazahlen rein.
 
switch arbeitet im ByteCode mit einem TableSwitch/LookupSwitch. Diese benötigen 32 Bit ganzzahlen.
Dass heißt, dass nur die Datentypen byte,char,short,int genutzt werden können.

Bei enums wird über die vom Compiler erzeugte ordnung (ebenfalls ein int) geswitched und bei String über den hashcode
 

Zurück
Oben