Όπως εξηγήθηκε στο προηγούμενο κεφάλαιο, μια μεταβλητή στη Java πρέπει να είναι ένα καθορισμένο τύπο δεδομένων. Υπάρχουν πολλοί τύποι δεδομένων στη Java, ανάλογα με το είδος των τιμών που πρόκειται να αποθηκευτούν στη μεταβλητή. Οι βασικοί τύποι δεδομένων στη Java περιλαμβάνουν:
- byte: αποθηκεύει έναν ακέραιο αριθμό από -128 έως 127
- short: αποθηκεύει έναν ακέραιο αριθμό από -32.768 έως 32.767
- int: αποθηκεύει έναν ακέραιο αριθμό από -2.147.483.648 έως 2.147.483.647
- long: αποθηκεύει έναν μεγάλο ακέραιο αριθμό από -9.223.372.036.854.775.808 έως 9.223.372.036.854.775.807
- float: αποθηκεύει έναν δεκαδικό αριθμό με μικρή ακρίβεια
- double: αποθηκεύει έναν δεκαδικό αριθμό με μεγαλύτερη ακρίβεια από το float
- boolean: αποθηκεύει μια τιμή true ή false
- char: αποθηκεύει έναν χαρακτήρα, όπως το γράμμα “a” ή το σύμβολο “$”
Επιπλέον, υπάρχουν και πιο σύνθετοι τύποι δεδομένων, όπως το String, που αποθηκεύει μια ακολουθία από χαρακτήρες.
Τα data types διαιρούνται σε δύο ομάδες:
Βασικοί τύποι δεδομένων – περιλαμβάνουν byte, short, int, long, float, double, boolean και char
Μη βασικοί τύποι δεδομένων – όπως οι συμβολοσειρές (String), οι πίνακες (Arrays) και οι κλάσεις (Classes) (θα μάθετε περισσότερα γι’αυτά σε ένα αργότερο κεφάλαιο)
Οι πρωτογενείς τύποι δεδομένων στη Java είναι οκτώ:
Τύπος δεδομένων | Μέγεθος | Περιγραφή |
---|---|---|
byte | 1 byte | Αποθηκεύει ακέραιους αριθμούς από -128 έως 127 |
short | 2 bytes | Αποθηκεύει ακέραιους αριθμούς από -32,768 έως 32,767 |
int | 4 bytes | Αποθηκεύει ακέραιους αριθμούς από -2,147,483,648 έως 2,147,483,647 |
long | 8 bytes | Αποθηκεύει ακέραιους αριθμούς από -9,223,372,036,854,775,808 έως 9,223,372,036,854,775,807 |
float | 4 bytes | Αποθηκεύει δεκαδικούς αριθμούς. Επαρκής για την αποθήκευση 6 έως 7 δεκαδικών ψηφίων |
double | 8 bytes | Αποθηκεύει δεκαδικούς αριθμούς. Επαρκής για την αποθήκευση 15 δεκαδικών ψηφίων |
boolean | 1 bit | Αποθηκεύει τιμές true ή false |
char | 2 bytes | Αποθηκεύει έναν μοναδικό χαρακτήρα/γράμμα ή τιμές ASCII |
Οι τύποι αριθμών που είναι αρχέτυποι χωρίζονται σε δύο ομάδες:
Οι ακέραιοι τύποι αποθηκεύουν ακέραιους αριθμούς, θετικούς ή αρνητικούς (όπως 123 ή -456), χωρίς δεκαδικά. Οι έγκυροι τύποι είναι byte, short, int και long. Ποιον τύπο θα πρέπει να χρησιμοποιήσετε εξαρτάται από την αριθμητική τιμή.
Οι αριθμοί με δεκαδικό μέρος αναπαριστούν αριθμούς με δεκαδικό μέρος, περιλαμβάνοντας ένα ή περισσότερα δεκαδικά. Υπάρχουν δύο τύποι: float και double.
[adinserter block=”2″]
Ακέραιοι Τύποι
Byte
Ο τύπος δεδομένων byte μπορεί να αποθηκεύσει ακέραιους αριθμούς από -128 έως 127. Αυτό μπορεί να χρησιμοποιηθεί αντί για τον int ή άλλους ακέραιους τύπους για να εξοικονομήσετε μνήμη όταν είστε σίγουροι ότι η τιμή θα είναι μεταξύ -128 και 127:
Ένα παράδειγμα χρήσης του τύπου δεδομένων byte στη Java θα μπορούσε να είναι το εξής:
byte myByte = 100;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myByte και τύπο δεδομένων byte. Της αναθέτουμε την τιμή 100, η οποία είναι μια έγκυρη τιμή για τον τύπο byte, καθώς βρίσκεται μεταξύ των ορίων του (-128 και 127).
Σημειώνεται ότι, σε περίπτωση που αναθέσουμε στη μεταβλητή myByte μια τιμή εκτός των ορίων του τύπου byte, θα προκαλέσουμε σφάλμα κατά την εκτέλεση του προγράμματος.
Short
Ο τύπος δεδομένων short μπορεί να αποθηκεύσει ακέραιους αριθμούς από -32768 έως 32767:
Παράδειγμα:
short myShort = 15000;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myShort και τύπο δεδομένων short. Της αναθέτουμε την τιμή 15000, η οποία είναι μια έγκυρη τιμή για τον τύπο short, καθώς βρίσκεται μεταξύ των ορίων του (-32768 και 32767).
Σημειώνεται ότι, όπως και με τον τύπο byte, η χρήση του τύπου short μπορεί να εξοικονομήσει μνήμη στο πρόγραμμα, όταν έχουμε την απόλυτη βεβαιότητα ότι οι τιμές που θα αποθηκεύονται θα βρίσκονται μεταξύ των ορίων του τύπου.
Int
Ο τύπος δεδομένων int μπορεί να αποθηκεύσει ακέραιους αριθμούς από -2147483648 έως 2147483647. Γενικά, και στον οδηγό μας, ο τύπος δεδομένων int είναι ο προτιμώμενος τύπος δεδομένων όταν δημιουργούμε μεταβλητές με αριθμητική τιμή.
Παράδειγμα:
int myInt = 50000;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myInt και τύπο δεδομένων int. Της αναθέτουμε την τιμή 50000, η οποία είναι μια έγκυρη τιμή για τον τύπο int, καθώς βρίσκεται μεταξύ των ορίων του (-2147483648 και 2147483647).
Ο τύπος δεδομένων int είναι επίσης ο προτιμώμενος τύπος για μαθηματικούς υπολογισμούς και για χρήση σε περισσότερες γενικές περιπτώσεις όπου δεν απαιτείται η χρήση των αραιότερων τύπων, όπως ο byte ή ο short.
Long
Ο τύπος δεδομένων long μπορεί να αποθηκεύσει ακέραιους αριθμούς από -9223372036854775808 έως 9223372036854775807. Χρησιμοποιείται όταν ο τύπος int δεν είναι αρκετά μεγάλος για να αποθηκεύσει την τιμή. Σημειώστε ότι θα πρέπει να τερματίζετε την τιμή με ένα “L”:
Παράδειγμα:
long myLong = 15000000000L;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myLong και τύπο δεδομένων long. Της αναθέτουμε την τιμή 15000000000L, η οποία είναι μια έγκυρη τιμή για τον τύπο long, αφού βρίσκεται μεταξύ των ορίων του (-9223372036854775808 και 9223372036854775807). Επειδή πρόκειται για τον τύπο long, τερματίζουμε την τιμή με το γράμμα “L”.
Ο τύπος δεδομένων long είναι χρήσιμος όταν απαιτείται η αποθήκευση πολύ μεγάλων ακέραιων τιμών, που δεν μπορούν να χωρέσουν στον τύπο int. Ωστόσο, ο τύπος αυτός απαιτεί περισσότερη μνήμη από τους πιο συνηθισμένους τύπους int και double.
Floating Point Types
Θα πρέπει να χρησιμοποιείτε έναν τύπο αριθμού κινητής υποδιαστολής (floating point) όποτε χρειάζεστε έναν αριθμό με δεκαδικό, όπως το 9.99 ή το 3.14515.
Οι τύποι δεδομένων float και double μπορούν να αποθηκεύσουν δεκαδικούς αριθμούς. Σημειώστε ότι θα πρέπει να τερματίζετε την τιμή με ένα “f” για τον τύπο float και “d” για τον τύπο double:
Παράδειγμα Float:
float myFloat = 3.14f;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myFloat και τύπο δεδομένων float. Της αναθέτουμε την τιμή 3.14f, η οποία είναι μια έγκυρη τιμή για τον τύπο float, αφού περιλαμβάνει δεκαδικά. Επειδή πρόκειται για τον τύπο float, τερματίζουμε την τιμή με το γράμμα “f”.
Ο τύπος δεδομένων float έχει μικρότερη ακρίβεια από τον τύπο double, αλλά απαιτεί μικρότερο απόθεμα μνήμης. Συνήθως ο τύπος double χρησιμοποιείται πιο συχνά από τον τύπο float, εκτός αν υπάρχει συγκεκριμένος λόγος να χρησιμοποιηθεί ο τύπος float.
Floating Point Types
Θα πρέπει να χρησιμοποιείτε έναν τύπο αριθμού κινητής υποδιαστολής (floating point) όποτε χρειάζεστε έναν αριθμό με δεκαδικό, όπως το 9.99 ή το 3.14515.
[adinserter block=”3″]
Οι τύποι δεδομένων float και double μπορούν να αποθηκεύσουν δεκαδικούς αριθμούς. Σημειώστε ότι θα πρέπει να τερματίζετε την τιμή με ένα “f” για τον τύπο float και “d” για τον τύπο double:
Παράδειγμα Double:
double myDouble = 3.14159265359d;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myDouble και τύπο δεδομένων double. Της αναθέτουμε την τιμή 3.14159265359d, η οποία είναι μια έγκυρη τιμή για τον τύπο double, αφού περιλαμβάνει δεκαδικά. Επειδή πρόκειται για τον τύπο double, τερματίζουμε την τιμή με το γράμμα “d”.
Ο τύπος δεδομένων double έχει μεγαλύτερη ακρίβεια από τον τύπο float, αλλά απαιτεί μεγαλύτερο απόθεμα μνήμης. Συνήθως ο τύπος double χρησιμοποιείται περισσότερο από τον τύπο float, εκτός αν υπάρχει συγκεκριμένος λόγος να χρησιμοποιηθεί ο τύπος float.
Επιστημονικοί Αριθμοί
Ένας αριθμός κινητής υποδιαστολής μπορεί επίσης να είναι ένας επιστημονικός αριθμός με ένα “e” για να υποδείξει τη δύναμη του 10:
Παράδειγμα:
double scientificNum = 1.2e-3;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα scientificNum και τύπο δεδομένων double. Η τιμή της μεταβλητής είναι 1.2e-3, η οποία είναι μια έγκυρη επιστημονική τιμή για τον τύπο double. Η διακύμανση στη δύναμη του 10 (εδώ -3) υποδηλώνει την τάξη μεγέθους της τιμής.
Οι επιστημονικοί αριθμοί είναι χρήσιμοι για να αναπαραστήσουν πολύ μεγάλα ή μικρά νούμερα με λιγότερους αριθμούς, χρησιμοποιώντας τη δύναμη του 10.
Τύποι Boolean
Πολλές φορές στον προγραμματισμό, θα χρειαστείτε έναν τύπο δεδομένων που μπορεί να έχει μόνο μία από δύο τιμές, όπως:
ΝΑΙ / ΟΧΙ
ΕΝΕΡΓΟΣ / ΑΝΕΝΕΡΓΟΣ
ΑΛΗΘΗΣ / ΨΕΥΔΗΣ
Για αυτό το σκοπό, η Java έχει έναν τύπο δεδομένων boolean, ο οποίος μπορεί να πάρει μόνο τις τιμές true ή false:
Παράδειγμα:
boolean myBoolean = true;
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myBoolean και τύπο δεδομένων boolean. Της αναθέτουμε την τιμή true, η οποία είναι μία από τις δύο δυνατές τιμές για τον τύπο boolean.
Ο τύπος boolean είναι χρήσιμος για να αναπαραστήσει λογικές τιμές στον κώδικα, όπως αν μια συνθήκη είναι αληθής ή ψευδής.
Ορισμός μιας μεταβλητής boolean με την τιμή true:
boolean myBool = true;
Ορισμός μιας μεταβλητής boolean με την τιμή false:
boolean myBool = false;
Χρήση της τιμής ενός boolean για έλεγχο σε μια συνθήκη if:
boolean myBool = true; if (myBool) { System.out.println("Η τιμή του myBool είναι true."); } else { System.out.println("Η τιμή του myBool είναι false."); }
[adinserter block=”4″]
Χρήση του τελεστή && για να ελέγξετε αν δύο boolean μεταβλητές είναι και οι δύο αληθείς:
boolean myBool1 = true; boolean myBool2 = false; if (myBool1 && myBool2) { System.out.println("Και οι δύο boolean μεταβλητές είναι αληθείς."); } else { System.out.println("Έστω και μία boolean μεταβλητή είναι ψευδής."); }
Χρήση μιας μεταβλητής boolean για να ελέγξετε αν ένα κείμενο είναι κενό:
String myString = "Αυτή είναι μια συμβολοσειρά."; boolean isEmpty = myString.isEmpty(); if (isEmpty) { System.out.println("Η συμβολοσειρά είναι κενή."); } else { System.out.println("Η συμβολοσειρά δεν είναι κενή."); }
Χρήση μιας μεταβλητής boolean για να ελέγξετε αν ένας αριθμός είναι μεγαλύτερος από έναν άλλο αριθμό:
int num1 = 10; int num2 = 5; boolean isGreater = num1 > num2; if (isGreater) { System.out.println("Ο αριθμός " + num1 + " είναι μεγαλύτερος από τον αριθμό " + num2 + "."); } else { System.out.println("Ο αριθμός " + num1 + " δεν είναι μεγαλύτερος από τον αριθμό " + num2 + "."); }
Χαρακτήρες στην Java
Ο τύπος δεδομένων char χρησιμοποιείται για την αποθήκευση ενός μόνο χαρακτήρα. Ο χαρακτήρας πρέπει να είναι περικυκλωμένος από μονά εισαγωγικά, όπως ‘Α’ ή ‘c’:
Παράδειγμα:
char myChar = 'A';
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myChar και τύπο δεδομένων char. Της αναθέτουμε την τιμή ‘A’, η οποία είναι ένας έγκυρος χαρακτήρας στην Java.
Ο τύπος char είναι χρήσιμος για την αποθήκευση ενός μόνο χαρακτήρα, όπως ένα γράμμα, ένα σύμβολο ή έναν αριθμό σε μορφή χαρακτήρα.
Ορισμός μιας μεταβλητής char με την τιμή ενός χαρακτήρα:
char myChar = 'a';
Χρήση μιας μεταβλητής char σε μια εντολή εκτύπωσης:
char myChar = 'b'; System.out.println("Ο χαρακτήρας είναι: " + myChar);
Χρήση ενός χαρακτήρα στο κέντρο μιας συμβολοσειράς:
char myChar = '!'; String myString = "Αυτή είναι μια συμβολοσειρά με τον χαρακτήρα " + myChar + " στο κέντρο."; System.out.println(myString);
Εναλλακτικά, αν είστε εξοικειωμένοι με τις τιμές ASCII, μπορείτε να χρησιμοποιήσετε αυτές για να εμφανίσετε συγκεκριμένους χαρακτήρες:
Παράδειγμα:
char myChar = 65; // 65 είναι ο κωδικός ASCII για το γράμμα 'A' System.out.println(myChar); // Το αποτέλεσμα θα είναι το γράμμα 'A'
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myChar και τύπο δεδομένων char. Στη συνέχεια, της αναθέτουμε την τιμή 65, η οποία είναι ο κωδικός ASCII για το γράμμα ‘A’. Τέλος, τυπώνουμε το περιεχόμενο της μεταβλητής μας, το οποίο θα είναι το γράμμα ‘A’.
Χρήση του τελεστή + για να προσθέσετε χαρακτήρες μαζί με μια μεταβλητή τύπου char σε μια συμβολοσειρά:
char myChar = '!'; String myString = "Αυτός είναι ο χαρακτήρας: " + myChar; System.out.println(myString);
Στο παραπάνω παράδειγμα, δημιουργούμε μια μεταβλητή με όνομα myChar και τύπο δεδομένων char. Στη συνέχεια, δημιουργούμε μια μεταβλητή με όνομα myString και τύπο δεδομένων String, στην οποία αποθηκεύουμε μια συμβολοσειρά που περιλαμβάνει τον χαρακτήρα myChar. Τέλος, τυπώνουμε το περιεχόμενο της μεταβλητής myString, το οποίο θα είναι “Αυτός είναι ο χαρακτήρας: !”.
[adinserter block=”5″]
Συμβολοσειρές στην Java
Ο τύπος δεδομένων String χρησιμοποιείται για την αποθήκευση μιας ακολουθίας χαρακτήρων (κειμένου). Οι τιμές String πρέπει να περικλείονται με διπλά εισαγωγικά:
Παράδειγμα:
String myString = "Αυτή είναι μια συμβολοσειρά.";
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myString και τύπο δεδομένων String. Της αναθέτουμε την τιμή “Αυτή είναι μια συμβολοσειρά.”, η οποία είναι μια έγκυρη συμβολοσειρά στην Java.
Ο τύπος String είναι χρήσιμος για την αποθήκευση συμβολοσειρών, όπως μηνύματα κειμένου, ονόματα χρηστών και κωδικούς πρόσβασης.
Πρόσβαση σε μια συγκεκριμένη θέση (index) της συμβολοσειράς με τη χρήση του τελεστή []:
String myString = "Αυτή είναι μια συμβολοσειρά."; char myChar = myString.charAt(7); // Η συνάρτηση charAt επιστρέφει τον χαρακτήρα στη συγκεκριμένη θέση System.out.println(myChar); // Το αποτέλεσμα θα είναι το γράμμα 'ι'
Στο παραπάνω παράδειγμα, ορίζουμε μια μεταβλητή με όνομα myString και τύπο δεδομένων String. Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση charAt για να πάρουμε τον χαρακτήρα στη θέση 7 της μεταβλητής myString, η οποία είναι το γράμμα ‘ι’. Τέλος, τυπώνουμε τον χαρακτήρα στην οθόνη.
Οι μη-βασικοί τύποι δεδομένων ονομάζονται τύποι αναφοράς, διότι αναφέρονται σε αντικείμενα.
Οι βασικές διαφορές μεταξύ βασικών και μη-βασικών τύπων δεδομένων είναι οι εξής:
Οι βασικοί τύποι έχουν καθοριστεί εκ των προτέρων (ήδη καθορισμένοι) στην Java. Οι μη-βασικοί τύποι δημιουργούνται από τον προγραμματιστή και δεν καθορίζονται από τη Java (εκτός από το String).
Οι μη-βασικοί τύποι μπορούν να χρησιμοποιηθούν για να καλέσουν μεθόδους για να εκτελέσουν συγκεκριμένες λειτουργίες, ενώ οι βασικοί τύποι δεν μπορούν.
Ένας βασικός τύπος έχει πάντα μια τιμή, ενώ οι μη-βασικοί τύποι μπορούν να είναι null.
Ένας βασικός τύπος ξεκινάει με πεζό γράμμα, ενώ οι μη-βασικοί τύποι ξεκινάνε με κεφαλαίο γράμμα.
Το μέγεθος ενός βασικού τύπου εξαρτάται από τον τύπο δεδομένων, ενώ οι μη-βασικοί τύποι έχουν όλοι το ίδιο μέγεθος.
Παραδείγματα μη-βασικών τύπων δεδομένων είναι οι String, οι πίνακες (arrays), οι κλάσεις (classes), οι διεπαφές (interfaces) και άλλα προηγμένα δομικά στοιχεία που μπορεί να δημιουργήσει ένας προγραμματιστής.
Οι μη-βασικοί τύποι δεδομένων προσφέρουν τη δυνατότητα δημιουργίας πιο περίπλοκων δομών και αλγορίθμων και επιτρέπουν στον προγραμματιστή να χειρίζεται μεγαλύτερα και πιο σύνθετα σετ δεδομένων. Επίσης, οι μη-βασικοί τύποι μπορούν να διαχειριστούν μεγάλες ποσότητες δεδομένων και παρέχουν περισσότερη ευελιξία στην ανάπτυξη λογισμικού.