PDA

View Full Version : [Java]Profondità massima switch case


The_ouroboros
24-08-2014, 20:20
Salve a tutti,
sapete per caso il limite di uno switch case in java?

Buon fine we

Freaxxx
24-08-2014, 22:54
In realtà il linguaggio Java ti dice che un costrutto switch-case viene compilato in bytecode in un certo modo con certe istruzioni, non ti impone un numero limite di casi per uno switch case; il limite è un dettaglio implementativo della macchina java più che del linguaggio, è un limite del software che si occupa di compilare e interpretare il tuo codice sorgente e produrre del bytecode da esso.

In genere le macchine java rappresentano ogni case assegnandogli un numero e usando quel numero come ID, tipicamente per fare ciò viene impiegato un intero da 32 bit, quindi in molte macchine java il limite teorico per il numero di case possibili è 2^32 .

Resta inteso che superare anche solo 10 case diventa follia pura, il tuo codice diventa astruso, molto poco leggibile e mantenibile, 2^32 = 4,294,967,296 casi .

sottovento
25-08-2014, 06:18
...
2^32 = 4,294,967,296 casi .

In realta' si possono usare anche i numeri a 64 bit e le stringhe; tuttavia la sua domanda era piu' pratica, immagino che The_ouroboros, che non e' alle prime armi, sapesse gia' fare questo calcolo.

The_ouroboros
25-08-2014, 07:23
Muchas gracias.
Era un dubbio che mi era venuto dato che sto sviluppando una piccola webapp in groovy.
Dato che alla fine si compila in bytecode java ha gli stessi "limiti" e mi era sorto la curiosità sui bit dell case id.
Cmq uso la jvm Oracle

Sent from my Nexus 5 using Tapatalk

Freaxxx
25-08-2014, 07:25
In realta' si possono usare anche i numeri a 64 bit e le stringhe; tuttavia la sua domanda era piu' pratica, immagino che The_ouroboros, che non e' alle prime armi, sapesse gia' fare questo calcolo.

si, anche short volendo, è comunque un dettaglio gestito dall'implementazione della JVM.

Trovo comunque che sia più una curiosità che altro, nessuna persona sana di mente vorrebbe superare la decina di casi per uno switch case .

The_ouroboros
25-08-2014, 08:08
Trovo comunque che sia più una curiosità che altro, nessuna persona sana di mente vorrebbe superare la decina di casi per uno switch case .

concordo in pieno

marakid
16-09-2014, 22:32
In questo scenario orribile di infiniti "case" probabilmente il primo limite contro cui sbatti il naso è la dimensione massima del bytecode, che mi pare sia 64kb per classe.

Limite contro cui mi è capitato di andare a sbattere con dei sistemi che generano codice automaticamente.

The_ouroboros
17-09-2014, 07:58
Interessante, muchas gracias por el información

Sent from my Nexus 5 using Tapatalk