This shows you the differences between two versions of the page.
| Next revision | Previous revision Next revision Both sides next revision | ||
|
java:wrapper_classes [2016/02/26 08:42] gthanos created |
java:wrapper_classes [2018/02/09 13:03] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Βασικοί τύποι δεδομένων και ισοδύναμοι αναφορικοί τύποι ====== | ====== Βασικοί τύποι δεδομένων και ισοδύναμοι αναφορικοί τύποι ====== | ||
| - | Στην εισαγωγική [[java: | + | Στην εισαγωγική [[java: |
| - | ^ Βασικός τύπος ^ Αναφορικός τύπος ^ | + | ^ Βασικός τύπος ^ Ισοδύναμος αναφορικός τύπος ^ |
| | boolean | [[http:// | | boolean | [[http:// | ||
| | byte | [[http:// | | byte | [[http:// | ||
| Line 54: | Line 54: | ||
| </ | </ | ||
| - | ===== Autoboxing και Unboxing ===== | ||
| - | Ο compiler της Java μας δίνει την δυνατότητα να χρησιμοποιήσουμε βασικούς τύπους σε σημεία του κώδικα που απαιτείται η ισοδύναμη αναφορική μορφή ή αναφορικούς τύπους σε σημεία του κώδικα που ζητείται η βασική μορφή. Ο compiler έχει την ιδιότητα να αναγνωρίζει σημεία του κώδικα που απαιτούν τις παραπάνω μετατροπές τύπου και κάνει αυτόματα τις μετατροπές αυτές. Θα δώσουμε παρακάτω από ένα παράδειγμα μετατροπής πάνω στο οποίο θα συζητήσουμε τις διαδικασίες Autoboxing και 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 | + | |
| - | </ | + | |
| - | + | ||
| - | |Προηγούμενο: | + | |