Συγκριτικό διάγραμμα:
Βάση σύγκρισης | Τύπος χύτευσης | Μετατροπή τύπου |
---|---|---|
Εννοια | Ένας τύπος δεδομένων έχει εκχωρηθεί σε άλλο από τον χρήστη, χρησιμοποιώντας έναν χειριστή cast και στη συνέχεια καλείται "Casting Type". | Η μετατροπή ενός τύπου δεδομένων σε άλλο αυτόματα από τον μεταγλωττιστή ονομάζεται "Μετατροπή τύπου". |
Εφαρμοσμένος | Η χύτευση τύπου μπορεί επίσης να εφαρμοστεί σε δύο τύπους δεδομένων που δεν είναι συμβατοί. | Η μετατροπή τύπου μπορεί να εφαρμοστεί μόνο όταν δύο τύποι δεδομένων είναι "συμβατοί". |
Χειριστής | Για τη χύτευση ενός τύπου δεδομένων σε άλλο, απαιτείται χειριστής '()' για τη χύτευση. | Δεν απαιτείται χειριστής. |
Μέγεθος Τύπων Δεδομένων | Ο τύπος προορισμού μπορεί να είναι μικρότερος από τον τύπο πηγής. | Εδώ ο τύπος προορισμού πρέπει να είναι μεγαλύτερος από τον τύπο προέλευσης. |
Εφαρμογή | Αυτό γίνεται κατά το σχεδιασμό του προγράμματος. | Αυτό γίνεται ρητά κατά τη σύνταξη. |
Τύπος μετατροπής | Περιορισμός της μετατροπής. | Διεύρυνση της μετατροπής. |
Παράδειγμα | int a; byte b; ... ... b = (byte) α. | int a = 3; float b; b = a; // αξία σε b = 3.000. |
Ορισμός της χύτευσης τύπου
Η χύτευση τύπων μπορεί να οριστεί ως χύτευση ενός τύπου δεδομένων σε άλλο τύπο δεδομένων από τον προγραμματιστή κατά τη στιγμή του σχεδιασμού του προγράμματος. Η αυτόματη μετατροπή ενός τύπου δεδομένων σε άλλο δεν είναι δυνατή συνεχώς. Μπορεί να είναι η προϋπόθεση ότι ο «τύπος προορισμού» είναι μικρότερος από τον «τύπο πηγής», ο προγραμματιστής πρέπει να τοποθετήσει ρητά τον μεγαλύτερο τύπο δεδομένων σε μικρότερο τύπο δεδομένων χρησιμοποιώντας τον χειριστή χύτευσης '()'. Καθώς ο μεγαλύτερος τύπος δεδομένων είναι διαμορφωμένος στον μικρότερο τύπο δεδομένων, ονομάζεται επίσης 'μείωση της μετατροπής'.
destination_type = (target_type) μεταβλητή / τιμή // ο τύπος στόχου είναι ένας τύπος στον οποίο θέλετε να μετατρέψετε τον τύπο πηγής είναι πάντα ο τύπος προορισμού.
Ας το καταλάβουμε με ένα παράδειγμα. Θέλετε να μετατρέψετε τον τύπο δεδομένων 'int' σε 'byte', τώρα, καθώς το 'byte' είναι μικρότερο από το 'int', δεν επιτρέπεται η μετατροπή τύπου. Εδώ, έπρεπε να μετατρέψουμε σιωπηρά το 'int' σε 'byte' χρησιμοποιώντας το χειριστή casting '()'. Δεδομένου ότι το 'int' είναι μεγαλύτερο από το 'byte', το μέγεθος του 'int' θα μειωθεί στο εύρος "int mod byte".
int a; byte b; ... ... b = (byte) a;
Όταν το 'float' μετατραπεί σε 'int', το μέγεθος του float περικόπτεται, καθώς το 'int' δεν αποθηκεύει την κλασματική τιμή. Εάν το μέγεθος του τύπου προορισμού είναι πολύ μικρό για να χωρέσει ο τύπος πηγής, τότε ο τύπος πηγής είναι ο τύπος προορισμού modulo "range". Η χύτευση μπορεί επίσης να εφαρμοστεί όταν οι τύποι δεδομένων είναι συμβατοί, είναι καλή πρακτική η χρήση χύτευσης τύπου όπου απαιτείται μετατροπή τύπου.
Ορισμός της μετατροπής τύπου
Η μετατροπή τύπου είναι η αυτόματη μετατροπή ενός τύπου δεδομένων σε άλλο, όποτε απαιτείται, και γίνεται ρητά από τον μεταγλωττιστή. Αλλά υπάρχουν δύο προϋποθέσεις που πρέπει να πληρούνται πριν από την μετατροπή τύπου.
- Ο τύπος πηγής και προορισμού πρέπει να είναι συμβατός.
- Ο τύπος προορισμού πρέπει να είναι μεγαλύτερος από τον τύπο πηγής.
Αυτές οι δύο συνθήκες θα πρέπει να ικανοποιούν για να επιτευχθεί μετατροπή τύπου, και αυτό το είδος μετατροπής ονομάζεται 'διεύρυνση της μετατροπής', καθώς ένας μικρότερος τύπος μετατρέπεται σε μεγαλύτερο τύπο, εμφανίζεται διεύρυνση του τύπου. Για αυτή τη διευρυμένη μετατροπή, οι αριθμητικοί τύποι ως 'int', 'float' είναι συμβατοί μεταξύ τους ενώ ο αριθμητικός χαρακτήρας και το boolean ή το char στο boolean δεν είναι συμβατοί.
Αυτό το παράδειγμα θα δώσει μια καλύτερη εικόνα αυτού
int a = 3; float b; b = a; // αξία σε b = 3.000.
Εδώ, το 'int' μετατρέπεται σε 'float' που είναι μεγαλύτερο από το 'int', έτσι εμφανίζεται η διεύρυνση του τύπου πηγής. Εδώ, δεν απαιτείται χειριστής χύτευσης, καθώς ο μεταγλωττιστής θα το κάνει ρητά.
Βασικές διαφορές μεταξύ της χύτευσης τύπου και της μετατροπής
- Η βασική διαφορά που διαφοροποιεί τη χύτευση τύπου από την μετατροπή τύπου είναι ότι η χύτευση τύπων είναι η μετατροπή ενός τύπου σε άλλο, που γίνεται από τον προγραμματιστή. Από την άλλη πλευρά, η μετατροπή τύπου είναι η μετατροπή ενός τύπου σε άλλο, που γίνεται από τον μεταγλωττιστή κατά τη σύνταξη.
- Η χύτευση τύπων μπορεί να εφαρμοστεί στους τύπους δεδομένων που μπορεί να μην είναι συμβατοί μεταξύ τους αλλά η μετατροπή τύπου μπορεί να εφαρμοστεί μόνο στους τύπους δεδομένων που είναι συμβατοί μεταξύ τους.
- Η μετατροπή ενός τύπου σε άλλο σε χύτευση τύπου απαιτεί τον χειριστή χύτευσης "()", ενώ η μετατροπή ενός τύπου δεδομένων σε άλλο σε μετατροπή τύπου δεν απαιτεί κανέναν χειριστή.
- Κατά τη μετατροπή ενός τύπου δεδομένων σε άλλο στη χύτευση τύπου, ο τύπος προορισμού μπορεί να είναι μεγαλύτερος ή μικρότερος από τον τύπο πηγής. Από την άλλη πλευρά, ο τύπος προορισμού πρέπει να είναι μεγαλύτερος από τον τύπο πηγής στην μετατροπή τύπου.
- Η μετατροπή ενός τύπου σε άλλο τύπο γίνεται κατά την κωδικοποίηση σε χύτευση τύπου, ενώ, κατά τη μετατροπή τύπου, η μετατροπή ενός τύπου σε άλλο γίνεται ρητά κατά τη διάρκεια της σύνταξης.
- Η χύτευση τύπων ονομάζεται στενότητα μετατροπής, επειδή εδώ ο τύπος προορισμού μπορεί να είναι μικρότερος από τον τύπο πηγής, ενώ η μετατροπή τύπου καλείται διεύρυνση της μετατροπής, επειδή εδώ ο τύπος προορισμού πρέπει να είναι μεγαλύτερος από τον τύπο πηγής.
Συμπέρασμα:
Μπορούμε να συμπεράνουμε ότι η μετατροπή τύπου και η χύτευση τύπου, και οι δύο εκτελούν την εργασία της μετατροπής ενός τύπου δεδομένων σε άλλον, αλλά διαφέρουν κατά μια έννοια ότι η χύτευση τύπων γίνεται από τον προγραμματιστή, χρησιμοποιώντας το cast operator '()' και η μετατροπή τύπου γίνεται από το μεταγλωττιστή και δεν χρησιμοποιεί κανέναν χειριστή.