JAVA + VS Code

ΕΝΟΤΗΤΑ 5 - LONG DATA TYPE AND CASTING

image description

ΕΙΣΑΓΩΓΗ

Στο σημερινό δωρεάν μάθημα Java θα παραμείνουμε στα Integral types για να δούμε αναλυτικά το long data type. Επίσης θα δούμε πως μπορούμε να μετατρέψουμε ένα variable από ένα data type σε ένα άλλο (π.χ. από int σε long και αντίστροφα) με την διαδικασία του casting.

ΠΩΣ ΟΡΙΖΟΥΜΕ ΣΩΣΤΑ ΕΝΑ LONG DATA TYPE

Όπως είχαμε αναφέρει και στο προηγούμενο δωρεάν μάθημα Java, το long data type είναι ένα 64-bit Java primitive data type. Συνήθως το χρησιμοποιούμε όταν θέλουμε να αναφερθούμε σε αρκετά μεγάλους ακέραιους αριθμούς που δεν μπορούμε να τους περιγράψουμε με το int data type των 32-bit.

Ο λόγος που αναφερόμαστε σε αυτό το data type είναι επειδή η Java, όσο αφορά τα integral data types, έχει το int σαν το default data type. Αυτό με απλά λόγια σημαίνει ότι όλους τους ακέραιους αριθμούς η Java προσπαθεί να τους μετατρέψει int. Οπότε για να μπορέσουμε να δηλώσουμε ένα long data type δεν είναι αρκετό να δηλώσουμε μόνο το long σαν data type αλλά θα πρέπει να προσθέσουμε και ένα κεφαλαίο L στο τέλος του αριθμού που ορίζουμε.

long num = 12345L;

Ας δούμε ένα απλό παράδειγμα στο οποίο χρησιμοποιούμε variables με long data types. Για αρχή, ας δημιουργήσουμε ένα καινούργιο project ή μπορείτε να κρατήσετε το ίδιο project και να δημιουργήσετε μια καινούργια κλάση μέσα σε αυτό με το όνομα LongDemo. Πρέπει να ορίσουμε την main( ) μέθοδο μέσα στην κλάση και μετά μια long variable με το όνομα spaceshipSpeed. Όταν αναθέσουμε μια τιμή στην μεταβλητή χωρίς όμως να προσθέσουμε το L στο τέλος του αριθμού, το VS Code θα παραπονεθεί υπογραμμίζοντας την μεταβλητή.

Δωρεάν Μαθήματα και Σεμινάρια JAVA

Αν μετακινήσουμε τον cursor επάνω στην μεταβλητή χωρίς να κάνουμε κλικ επάνω της, θα δούμε το εξής μήνυμα:

Δωρεάν Μαθήματα και Σεμινάρια JAVA

Επιβεβαιώνεται λοιπόν αυτό που είπαμε στην αρχή, ότι δηλαδή η Java προσπαθεί μετατρέψει όλους τους integral αριθμούς σε int. Για να διορθώσουμε το λάθος, προσθέτουμε το κεφαλαίο L στο τέλος του αριθμού.

Δωρεάν Μαθήματα και Σεμινάρια JAVA

Στο απλό παράδειγμα που ακολουθεί, θέλουμε να υπολογίσουμε πόσα χιλιόμετρα θα διανύσει το διαστημόπλοιο μετά από τρία χρόνια. Ας ολοκληρώσουμε το πρόγραμμα μας γράφοντας τον εξής κώδικα:

Output

Δωρεάν Μαθήματα και Σεμινάρια JAVA

Αν θέλετε να μάθετε πόσο μεγάλος είναι ένας long αριθμός, τότε μπορείτε να αναθέσετε την τιμή Long.MAX_VALUE σε μια μεταβλητή και να τυπώσετε την τιμή της στο terminal. Αντίστοιχα θα μπορούσατε να μάθετε με το Long.MIN_VALUE ποια είναι η κατώτερη τιμή που μπορεί να έχει ένας long αριθμός. Ας προσθέσουμε λοιπόν μερικές ακόμα γραμμές κώδικα στο πρόγραμμα μας.

Output

Δωρεάν Μαθήματα και Σεμινάρια JAVA

CASTING

Στον προγραμματισμό είναι πολύ συνηθισμένο φαινόμενο να αναθέτουμε την τιμή μιας μεταβλητής σε μια άλλη μεταβλητή. Εάν τα data types των μεταβλητών είναι συμβατά μεταξύ τους τότε η Java θα κάνει αυτόματα την μετατροπή από το ένα data type στο άλλο. Για παράδειγμα, μια int μεταβλητή μπορεί να αναθέσει την τιμή της σε μια long μεταβλητή χωρίς να χρειαστεί η δική μας παρέμβαση. Η λογική είναι απλή: ο long αριθμός είναι 64 bit που σημαίνει ότι μπορεί να αντιπροσωπεύσει και να περιγράψει έναν int αριθμό των 32 bits χωρίς να υπάρξει λάθος. Αυτή την διαδικασία την αναλαμβάνει αυτόματα η Java.

Υπάρχουν όμως περιπτώσεις όπου θέλουμε να εκτελέσουμε την ακριβώς αντίθετη λειτουργία, δηλαδή να αναθέσουμε έναν long αριθμό με μια int μεταβλητή. Σε αυτή την περίπτωση η Java δεν παίρνει την ευθύνη να κάνει αυτόματα την μετατροπή γιατί μπορεί να αλλοιωθεί η ακρίβεια του αποτελέσματος. Μπορούμε όμως εμείς να εκτελέσουμε αυτή την διαδικασία χρησιμοποιώντας casting.

Με το casting δηλώνουμε σε ποια μορφή θέλουμε να μετατρέψουμε έναν αριθμό πριν το αναθέσουμε στην μεταβλητή. Η σύνταξη της εντολής είναι απλή: μέσα σε παρένθεση γράφεται το επιθυμητό data type και αμέσως μετά την τιμή ή την μεταβλητή που θέλετε να μετατρέψετε.

Ας δημιουργήσουμε μια καινούργια κλάση και ας την ονομάσουμε Casting. Ας γράψουμε τον εξής κώδικα και αμέσως μετά θα τον εξηγήσουμε.

Output

Δωρεάν Μαθήματα και Σεμινάρια JAVA

8

Σε αυτή τη γραμμή κώδικα, η var1 μεταβλητή θα ελεγχθεί πρώτη και θα βρεθεί να είναι int 32 bits. Μετά θα ελεγχθεί η var2 και θα βρεθεί να είναι long 64 bits. Ένας αριθμός των 32 bits μπορεί να ανατεθεί σε μια μεταβλητή με περισσότερα bits χωρίς να υπάρχει φόβος ότι θα λάβουμε λανθασμένο αποτέλεσμα. Εδώ η Java εκτελεί την μετατροπή αυτόματα και δέχεται την ανάθεση. Ο επίσημος όρος αυτής της αυτόματης μετατροπής είναι widening conversion.

13

Σε αυτή την γραμμή κώδικα, αν και η var4 μεταβλητή περιέχει την τιμή 25 που άνετα «χωράει» σε μια int μεταβλητή, η Java δεν το υπολογίζει αυτό. Αυτό που ελέγχει, και κατά συνέπεια εμποδίζει την διαδικασία της αυτόματης ανάθεσης, είναι η ανάθεση ενός 64 bits αριθμού σε μια 32 bits μεταβλητή. Ξανά, μπορεί η μεταβλητή να έχει την τιμή 25 αλλά η Java θεωρεί κάλλιστα ότι ο αριθμός θα μπορούσε και να είναι ο μέγιστος αριθμός που μπορεί να πάρει μια long μεταβλητή. Με αυτή την λογική λοιπόν δεν εκτελεί την αυτόματη μετατροπή από long σε int αλλά αφήνει τον προγραμματιστή να πάρει την ευθύνη. Διαβάζει λοιπόν πρώτα την τιμή var4 και μετά την μετατρέπει σε int ακολουθώντας το casting type που έχουμε ορίσει μέσα στην παρένθεση. Τώρα που εκτελέστηκε το casting γίνεται η ανάθεση του αριθμού στην μεταβλητή var3. Αυτό το είδος του casting ονομάζεται narrowing conversion.

Με την ίδια λογική μπορείτε να μετατρέψετε έναν αριθμό από short σε byte ή από int σε short.

Πριν κλείσουμε την σημερινή ενότητα θα ήθελα να αναφερθώ στο γεγονός ότι η Java επιτρέπει να δηλώσουμε έναν αριθμό σε κάπως πιο φιλική μορφή χρησιμοποιώντας το underscore ( _ ). Αυτό ίσως να σας φανεί χρήσιμο στο να μπορείτε να διαβάζετε γρήγορα ένα αριθμό που περιέχει πολλά ψηφία. Δεν έχω δει πολλούς προγραμματιστές να περιγράφουν έτσι έναν αριθμό όμως υπάρχει σαν επιλογή στην Java. Αυτό είναι καθαρά θέμα προσωπικού στυλ ανάπτυξης κώδικα.

Output

Δωρεάν Μαθήματα και Σεμινάρια JAVA

Μην ξεχάσετε να κάνετε ένα μικρό donation έτσι ώστε αυτό το site να μεγαλώσει ακόμα πιο πολύ και να έχει περισσότερες δυνατότητες στην Online παράδοση δωρεάν μαθημάτων.

Γίνε Χορηγός στη Γνώση

ΕΙΣΗΓΗΤΗΣ

Merry Jhonson

Μιχάλης Κασάπογλου

Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.

loader