java:literals

Κυριολεκτικά (literals)

Με τον όρο “κυριολεκτικά” (literals) εννοούμε την ανάθεση “σταθερών” τιμών σε μεταβλητές βασικών τύπων μέσα στον κώδικα. Παραδείγματα κυριολεκτικών είναι τα παρακάτω:

boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;

Κυριολεκτικά αλφαριθμητικών (strings)

Τα κυριολεκτικά αλφαριθμητικών ορίζονται με διπλά εισαγωγικά. Ένα παράδειγμα ορισμού String μπορείτε να δείτε παρακάτω:

String str = "this is a string";

Μπορείτε να παράγετε ένα νέο αλφαριθμητικό από την συνένωση δύο υφιστάμενων αλφαριθμητικών με χρήση του τελεστή '+' ως εξής:

String greeting = "Hello " + "World!";

Μετά την εκτέλεση της παραπάνω εντολής η μεταβλητή greeting περιέχει το αλφαριθμητικό “Hello World!”.

Κυριολεκτικά χαρακτήρων

Κυριολεκτικά χαρακτήρων ορίζονται με απλά εισαγωγικά ως εξής:

char c = 'a';

Οι χαρακτήρες στην Java καταλαμβάνουν 2 bytes και έχουν κωδικοποίηση UTF-16. Μπορείτε να αναθέσετε τιμές σε χαρακτήρες με χρήση της unicode escape μορφής τους, όπως παρακάτω:

char c = '1';
char d = '\u0031'; // equals char '1';
String str = "S\u00ED Se\u00F1or"; // equals "Sí Señor" in spanish

Επίσης ορίζονται οι ειδικοί χαρακτήρες

  • \b (backspace)
  • \t (tab)
  • \n (line feed)
  • \f (form feed)
  • \r (carriage return)
  • \“ (double quote)
  • \' (single quote)
  • \\ (backslash)

Κυριολεκτικά ακεραίων αριθμών

Τα κυριολεκτικά ακεραίων αριθμών είναι τύπου int εκτός εάν έχουν τον χαρακτήρα 'L' ή 'l' στο τέλος οπότε είναι τύπου long (θα εξηγήσουμε στη συνέχεια). Αν θέλετε να αναθέσετε μία ακέραια τιμή σε μία μεταβλητή τύπου byte, short, int τότε αρκεί να χρησιμοποιήσετε μία δήλωση της μορφής:

byte b = 100;
short s = 10000;
int i = 100000;

Εάν επιχειρήσετε να αναθέσετε σε μία μεταβλητή μία τιμή η οποία υπερβαίνει την χωρητικότητα της τότε θα λάβετε ένα μήνυμα λάθους από τον compiler, όπως παρακάτω

byte b = 1000;
 
error: incompatible types: possibly lossy conversion from integer to byte.
byte b = 1000;
          ^
Δεν μπορείτε να αναθέσετε σε μία μεταβλητή τύπου byte την τιμή 1000, καθώς 
το εύρος τιμών της είναι από -128 έως 127.

Εάν θέλετε να αναθέσετε σε μία μεταβλητή τύπου long μία τιμή που είναι μεγαλύτερη από την μέγιστη τιμή της μεταβλητής int ή μικρότερη της ελάχιστης τιμή της int, τότε θα πρέπει να χρησιμοποιήσετε ένα κυριολεκτικό τύπου long, όπως δείχνουμε παρακάτω:

long a = 2147483648878787L;
ή
long a = 2147483648878787l;

Εάν παραλείψετε τον χαρακτήρα 'L' ή 'l', τότε ο compiler εμφανίζει το παρακάτω μήνυμα λάθους.

error: integer number too large: 2147483648878787
    long a = 2147483648878787;
             ^

Σε έναν ακέραιο αριθμό (byte, short, int, long) μπορείτε να αναθέσετε τιμές χρησιμοποιώντας κυριολεκτικά δεκαδικής, δεκαεξαδικής ή δυαδικής μορφής. Ενδεικτικά παραδείγματα δίνονται παρακάτω:

  • Δεκαδικές τιμές: int decVal = 26;
  • Δεκαεξαδικές τιμές: int hexVal = 0x1a;
  • Δυαδικές τιμές: int binVal = 0b11010;

Κυριολεκτικά αριθμών κινητής υποδιαστολής (float)

Τα κυριολεκτικά αριθμών κινητής υποδιαστολής είναι τύπου double και όχι float. Αυτό πρακτικά σημαίνει ότι μπορείτε να αναθέσετε οποιαδήποτε τιμή σε μία μεταβλητή double χωρίς περιορισμούς.

double d = 0.14768; ή double d = 0.14768D;

Δεν συνιστάται, αλλά για λόγους πληρότητας αναφέρεται εδώ.

Εάν για οποιονδήποτε λόγο θέλετε να αναθέσετε μία τιμή σε μία μεταβλητή τύπου float τότε αυτή θα πρέπει να έχει τα εξής χαρακτηριστικά:

  • να χωρά σε μία μεταβλητή τύπου float.
  • η τιμή να τελειώνει με τον χαρακτήρα 'F' ή 'f', δηλώνοντας ένα κυριολεκτικό float.

Δείτε το παρακάτω παραδειγμα:

float d= 1288789.99999999999999999999;
 
Λαμβάνετε το παρακάτω μήνυμα λάθους, καθώς πάτε να αντιστοιχίσετε σε μία μεταβλητή τύπου float ένα κυριολεκτικό double.
error: possible loss of precision
    float d= 1288789.99999999999999999999;
             ^
  required: float
  found:    double

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

float d= 1288787879999999999999999999999999999999999999999999999999.99999999999999999999F;
 
error: floating point number too large
    float d= 1288789999999999999999999999999999999999999999999999999999999.99999999999999999999F;
             ^

Εάν ένα κυριολεκτικό είναι τύπου float αντί για double, θα πρέπει να τελειώνει σε F ή f, δηλ.

float f = 0.14768f; ή float f = 0.14768F;

Χρήση χαρακτήρων '_' (underscore) σε αριθμητικά κυριολεκτικά

Μπορούμε να χρησιμοποιήσουμε χαρακτήρες underscore σε αριθμητικά κυριολεκτικά (κυρίως για λόγους αναγνωσιμότητας) όπως παρακάτω:

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi =  3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

Δεν μπορείτε να χρησιμοποιήσετε underscores

  • στην αρχή ενός αριθμού ή στο τέλος του.
  • πριν ή μετά την υποδιαστολή.
  • πριν τον χαρακτήρα 'F' ή 'L'.
java/literals.txt · Last modified: 2020/02/20 14:19 by gthanos