Εδώ και χρόνια χρησιμοποιώ το FrondEnd Plus για να κάνω decompile κλάσσεις και να βλέπω τι γίνεται “κάτω από το κάπο” όπως λένε (under the hood).
Ένα απλό παράδειγμα είναι το τί γίνεται όταν κάποιος χρησιμοποιήσει το enhanced for loop, το οποίο αποτελεί μέρος του συντακτικού από την έκδοση 1.5 και μετά. Ας πούμε λοιπόν ότι έχουμε το παρακάτω loop που γεμίιζει έναν πίνακα από αντικείμενα String με την ίδια τιμή:
String[] arrayS = new String[10];for(String s : arrayS) s = "same string";
Κάνε compile και μετά άνοιξε το FronEnd Plus. File -> Open και επέλεξε το compiled αρχείο (.class). Θα δεις ότι ο κώδικας έχει μεταλλαχθεί στην παρακάτω μορφή:
String arrayS[] = new String[10];String arr$[] = arrayS;int len$ = arr$.length;for(int i$ = 0; i$ < len$; i$++){ String s = arr$[i$]; s = "same string";}
Όπως καταλαβαίνεις αυτό που κάνει ο compiler στα πλαίσια της βελτιστοποίησης είναι να μετατρέψει το enhanced loop σε απλό for loop αφού προηγουμένος έχει πάρει ένα reference από τον δηλωθέν πίνακα.