This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:wrapper_classes [2017/01/30 10:49] gthanos [Autoboxing] |
java:wrapper_classes [2017/02/16 12:20] gthanos |
||
|---|---|---|---|
| Line 54: | Line 54: | ||
| </ | </ | ||
| - | ===== Autoboxing και Unboxing ===== | ||
| - | Ο compiler της Java μας δίνει την δυνατότητα να χρησιμοποιήσουμε βασικούς τύπους σε σημεία του κώδικα που απαιτείται η ισοδύναμη αναφορική μορφή ή αναφορικούς τύπους σε σημεία του κώδικα που ζητείται η βασική μορφή. Ο compiler έχει την ιδιότητα να αναγνωρίζει σημεία του κώδικα που απαιτούν τις παραπάνω μετατροπές τύπου και κάνει αυτόματα τις μετατροπές αυτές. Η ιδιότητα αυτή του Java compiler απαντάται στην βιβλιογραφεία ως Auto-boxing και Auto-unboxing. Θα δώσουμε παρακάτω από ένα παράδειγμα μετατροπής πάνω στο οποίο θα συζητήσουμε τις διαδικασίες Auto-boxing και Auto-unboxing. | + | |Προηγούμενο: |
| - | + | ||
| - | ==== Autoboxing ==== | + | |
| - | + | ||
| - | <code java AutoboxExample.java> | + | |
| - | public class AutoboxExample { | + | |
| - | public static void main(String []args) { | + | |
| - | int a=5; | + | |
| - | System.out.println(" | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Ο παραπάνω κώδικας εκτυπώνει την τιμή της μεταβλητής //a// που τυγχάνει να είναι βασικού τύπου. Για να το επιτύχει αυτό καλείται να εκτυπώσει ένα αλφαριθμητικό (// | + | |
| - | + | ||
| - | Η παραπάνω αυτόματη μετατροπή που κάνει ο compiler, μπορεί να γραφεί ισοδύναμα ως εξής: | + | |
| - | + | ||
| - | <code java AutoboxExample.java> | + | |
| - | public class AutoboxExample { | + | |
| - | public static void main(String []args) { | + | |
| - | int a=5; | + | |
| - | System.out.println(" | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Οι δύο παραπάνω κλάσεις είναι ισοδύναμες. Η αιτία της ισοδυναμίας είναι η ιδιότητα του compiler να αναγνωρίζει την ανάγκη μετατροπής ενός βασικού τύπου σε αναφορικό. | + | |
| - | + | ||
| - | <WRAP tip 80% center round> | + | |
| - | Στο συγκεκριμένο παράδειγμα, | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Unboxing ==== | + | |
| - | + | ||
| - | <code java UnboxExample.java> | + | |
| - | public class UnboxExample { | + | |
| - | public static int sum(int a, int b) { | + | |
| - | | + | |
| - | } | + | |
| - | + | ||
| - | public static void main(String []args) { | + | |
| - | Integer a = new Integer(5); | + | |
| - | Integer b = new Integer(10); | + | |
| - | int result = sum(a,b); | + | |
| - | System.out.println(" | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Στο παραπάνω παράδειγμα, | + | |
| - | + | ||
| - | <code java UnboxExample.java> | + | |
| - | public class UnboxExample { | + | |
| - | public static int sum(int a, int b) { | + | |
| - | | + | |
| - | } | + | |
| - | + | ||
| - | public static void main(String []args) { | + | |
| - | Integer a = new Integer(5); | + | |
| - | Integer b = new Integer(10); | + | |
| - | int result = sum(a.intValue(), | + | |
| - | System.out.println(" | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Ο compiler έχει την δυνατότητα να μετατρέπει τους βασικούς τύπους σε ισοδύναμους αναφορικούς και αντίστροφα, | + | |
| - | + | ||
| - | <code java UnboxExample.java> | + | |
| - | public class UnboxExample { | + | |
| - | public static int sum(int a, int b) { | + | |
| - | | + | |
| - | } | + | |
| - | + | ||
| - | public static void main(String []args) { | + | |
| - | Long a = new Long(5); | + | |
| - | Integer b = new Integer(10); | + | |
| - | int result = sum(a,b); | + | |
| - | System.out.println(" | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | < | + | |
| - | $ javac UnboxExample.java | + | |
| - | UnboxExample.java: | + | |
| - | int result = sum(a,b); | + | |
| - | ^ | + | |
| - | required: int,int | + | |
| - | found: Long, | + | |
| - | reason: actual argument Long cannot be converted to int by method invocation conversion | + | |
| - | 1 error | + | |
| - | </ | + | |
| - | + | ||
| - | |Προηγούμενο: | + | |