# Ποιοι είναι οι διαφορετικοί τύποι δεδομένων στη Java;

Η Java προσφέρει οκτώ βασικούς τύπους δεδομένων και πολυάριθμους σύνθετους τύπους δεδομένων. Αυτοί καθορίζουν ποιες τιμές μπορούν να αποθηκευτούν και να εμφανιστούν σε μια μεταβλητή. Ορισμένοι τύποι δεδομένων εκχωρούνται σε όλες τις μεταβλητές στη Java.

## Ποιοι τύποι δεδομένων υπάρχουν στη Java;

Σε κάθε γλώσσα προγραμματισμού, υπάρχουν διάφοροι τύποι δεδομένων που περιέχουν συγκεκριμένα αντικείμενα και καθορισμένες λειτουργίες. Αν και οι επιλογές τύπων δεδομένων που προσφέρουν οι διάφορες γλώσσες συχνά μοιάζουν μεταξύ τους, μερικές φορές υπάρχουν σημαντικές διαφορές. Για παράδειγμα, αν [συγκρίνετε τις γλώσσες Python και Java](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/python-enanti-java/) και τους τύπους δεδομένων τους, θα παρατηρήσετε ομοιότητες μεταξύ των δύο, αλλά και πολλές διαφορές που κάνουν τις γλώσσες κατάλληλες για διαφορετικούς τύπους εργασιών.

Η Java χρησιμοποιεί δύο διαφορετικούς τύπους δεδομένων: **τους πρωτότυπους και τους σύνθετους**. Οι σύνθετοι τύποι δεδομένων ονομάζονται επίσης τύποι αναφοράς. Οι πρωτότυποι και οι σύνθετοι τύποι δεδομένων διαφέρουν ως προς το μέγεθός τους και καθορίζουν ποιες τιμές μπορούν να αποθηκευτούν σε μια μεταβλητή. Ενώ οι πρωτότυποι τύποι δεδομένων μπορούν **να αποθηκεύσουν** μόνο **απλές τιμές**, οι τύποι αναφοράς χρησιμοποιούνται για **τη δημιουργία πιο σύνθετων δομών** και **την οργάνωση και επεξεργασία μεγάλων ποσοτήτων δεδομένων**.

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

## Τι είναι οι πρωτόγονοι τύποι δεδομένων στη Java;

Υπάρχουν συνολικά οκτώ διαφορετικοί [πρωτόγονοι τύποι δεδομένων στη Java](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/protogeneis-typoi-java/), οι οποίοι περιέχουν αυστηρά καθορισμένα εύρη τιμών. Μπορούν να χωριστούν σε τέσσερις κατηγορίες: **λογικοί τύποι δεδομένων, ακέραιοι τύποι δεδομένων, τύποι δεδομένων κινητής υποδιαστολής και τύποι δεδομένων χαρακτήρων**. Δεν έχουν πρόσθετες ειδικές δυνατότητες και αναφέρονται επίσης ως στοιχειώδεις τύποι δεδομένων. Κάθε τύπος δεδομένων έχει έναν σταθερό αριθμό bit. Θα εξετάσουμε τους πρωτόγονους τύπους δεδομένων με περισσότερες λεπτομέρειες παρακάτω. Η Java χρησιμοποιεί τους ακόλουθους πρωτόγονους τύπους:

- boolean
- byte
- short
- int ή ακέραιος
- long
- float
- διπλό
- χαρακτήρας

### `boolean`

Ο τύπος δεδομένων[boolean της Java](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/o-typos-dedomenon-boolean-tis-java/) δεν είναι αριθμητικός τύπος. Προσφέρει μόνο δύο πιθανές τιμές: **true** και **false**. Μπορεί να χρησιμοποιηθεί για να προσδιορίσει εάν μια συνθήκη ισχύει (true) ή όχι (false). Είναι ένας λογικός τύπος δεδομένων και η προεπιλεγμένη τιμή του είναι `false`. Αποτελείται από 1 bit και έχει την ακόλουθη σύνταξη:

```java
boolean booleanVar;
```

### `byte`

`byte` είναι ένας ακέραιος τύπος δεδομένων που αναπαρίσταται ως τιμή συμπληρώματος δύο με μέγεθος 8 bit ή 1 byte. Χρησιμοποιείται συνήθως για την εξοικονόμηση μνήμης σε μεγαλύτερους πίνακες. Το εύρος των τιμών του κυμαίνεται από -128 έως 127 και η προεπιλεγμένη τιμή του είναι 0. Ακολουθεί η σύνταξή του:

```java
byte byteVar;
```

### `short`

`short` είναι επίσης ένας από τους ακέραιους τύπους δεδομένων στη Java και χρησιμοποιείται κυρίως για την εξοικονόμηση μνήμης σε μεγαλύτερους πίνακες. Η τιμή του συμπληρώματος του δύο είναι 16 bit ή 2 byte σε μέγεθος και το εύρος τιμών της εκτείνεται **από -32768 έως και 32767**. Από προεπιλογή, η τιμή της είναι 0. Έτσι χρησιμοποιείται `short`:

```java
short shortVar
```

### `int` ή ακέραιος αριθμός

`int` ή ο ακέραιος αριθμός είναι επίσης μια τιμή συμπληρώματος δύο και ένας ακέραιος τύπος δεδομένων με μέγεθος 4 byte ή 32 bit. Το εύρος τιμών του περιλαμβάνει ακέραιους αριθμούς **μεταξύ -2147483648 και 2147483647** και η προεπιλεγμένη τιμή του είναι 0. Η σύνταξή του έχει ως εξής:

```java
int intVar
```

### `long`

Ο μεγαλύτερος ακέραιος τύπος δεδομένων είναι `long`. Αυτό ισχύει πρώτον για το εύρος τιμών του, το οποίο κυμαίνεται **μεταξύ -9223372036854775808 και 9223372036854775807**, και δεύτερον για το μέγεθός του, το οποίο είναι 8 byte ή 64 bit. Η τιμή του συμπληρώματος του δύο χρησιμοποιείται επομένως εάν οι άλλοι ακέραιοι τύποι δεδομένων δεν είναι επαρκείς. Ωστόσο, απαιτεί επίσης τη μεγαλύτερη μνήμη. Η προεπιλεγμένη τιμή του είναι 0. Αυτή είναι η σύνταξή του:

```java
lomg longVar
```

### `float`

`float` είναι ένας τύπος δεδομένων κινητής υποδιαστολής και χρησιμοποιείται για την αποθήκευση πραγματικών αριθμών. Έχει μέγεθος 32 bit και συμμορφώνεται με το πρότυπο IEEE 754, το οποίο ορίζει την τυπική αναπαράσταση των δυαδικών και δεκαδικών αριθμών κινητής υποδιαστολής στους υπολογιστές. Η τυπική τιμή του `float` είναι 0,0 και μπορούν να αναπαρασταθούν έως και **επτά δεκαδικά ψηφία** στο εύρος τιμών του. Ωστόσο, σε σύγκριση με το double, `float` δεν είναι τόσο ακριβές και επομένως δεν πρέπει να χρησιμοποιείται για τιμές όπου η ακρίβεια παίζει καθοριστικό ρόλο. Ωστόσο, εάν αυτό δεν ισχύει, μπορείτε να χρησιμοποιήσετε `float` για να εξοικονομήσετε χώρο. Η σύνταξη για `float` έχει ως εξής:

```java
float floatVar;
```

### `double`

`double` είναι περίπου δύο φορές πιο ακριβές από το float και εξυπηρετεί παρόμοιο σκοπό. Έχει μέγεθος 64 bit και μπορεί να αναπαραστήσει **έως και 16 δεκαδικά ψηφία**. Η προεπιλεγμένη τιμή του είναι επίσης 0,0. Εάν χρειάζεστε τιμές που είναι πιο ακριβείς, θα πρέπει να χρησιμοποιείτε πάντα `double`, αν και αυτός ο τύπος δεδομένων δεν είναι και τόσο ακριβής. Αν θέλετε να εργαστείτε με απολύτως ακριβείς τιμές, θα πρέπει να χρησιμοποιήσετε την κλάση BigDecimal. Η σύνταξη του `double` έχει ως εξής:

```java
double doubleVar;
```

### `char`

`char` είναι ένας τύπος δεδομένων χαρακτήρων. Αποθηκεύει χαρακτήρες με βάση το σύνολο χαρακτήρων Unicode, επιτρέποντας τη μεταφορά σε πολλές διαφορετικές πλατφόρμες. Κάθε χαρακτήρας απαιτεί 2 byte μνήμης. Το εύρος τιμών του αντιστοιχεί στο ASCII (American Standard Code for Information Interchange) και βρίσκεται **μεταξύ ‘\\u0000’ (δηλ. 0) και ‘\\uffff’ (αντιστοιχεί στο 65535)**. Η προεπιλεγμένη τιμή του char είναι ‘\\u0000’ και η σύνταξή του έχει την εξής μορφή:

```java
char charVar
```

## Τι είναι οι σύνθετοι τύποι δεδομένων στη Java;

Ο δεύτερος τύπος δεδομένων στη Java είναι οι τύποι αναφοράς, που αναφέρονται επίσης ως σύνθετοι τύποι δεδομένων. Ονομάζονται τύποι αναφοράς επειδή **αναφέρονται σε αντικείμενα**. Σε αντίθεση με τους πρωτότυπους τύπους δεδομένων, δεν είναι συνήθως προκαθορισμένοι, αλλά καθορίζονται από τον προγραμματιστή (εξαίρεση αποτελεί η συμβολοσειρά). Μπορούν να χρησιμοποιούν μεθόδους και μπορούν επίσης να έχουν την τιμή 0 (με την έννοια του κενού). Ενώ οι πρωτότυποι τύποι δεδομένων ξεκινούν με μικρό γράμμα, οι τύποι αναφοράς ξεκινούν με κεφαλαίο γράμμα. Εδώ, θα ρίξουμε μια ματιά στους πιο σημαντικούς τύπους αναφοράς.

### Χορδές

`String` είναι μια κλάση που μπορεί να χρησιμοποιηθεί για την αναπαράσταση μιας **ακολουθίας χαρακτήρων**, διακρίνοντας αυτόν τον σύνθετο τύπο δεδομένων από τον πρωτόγονο τύπο δεδομένων `char` καθώς και από άλλους τύπους δεδομένων. Μια συμβολοσειρά υπάρχει ως αντικείμενο στην κλάση `java.lang`. Οι διάφορες μέθοδοι της κλάσης String σας επιτρέπουν να εξετάζετε μεμονωμένους χαρακτήρες στη συμβολοσειρά, να συγκρίνετε συμβολοσειρές μεταξύ τους, να αναζητάτε συμβολοσειρές και να αντιγράφετε συμβολοσειρές. Οι συμβολοσειρές προσδιορίζονται με εισαγωγικά. Η σύνταξη αυτού του τύπου αναφοράς έχει την εξής μορφή:

```java
<string_type> <string_variable> = "<string_sequence>";
```

Ακολουθεί ένα παράδειγμα του τρόπου λειτουργίας των συμβολοσειρών:

```java
// How to create a string without a new operator
String a = "This is your new string";
/ / How to create a string with a new operator
String a1 = new string ("This is your new string");
```

### Πίνακες

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

```java
dataType[] arrayName = {value1, value2, value3,…};
```

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

```java
String[] colors = {"blue", "red", "yellow", "purple"};
```

Δείτε πώς μπορείτε να δημιουργήσετε έναν πίνακα με ακέραιους αριθμούς:

```java
int[] figures = {5, 10, 15, 20};
```

### Μαθήματα

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

```java
public class Main {
	int a = 10;
}
```

### Διεπαφές

Στη Java, μια διεπαφή είναι μια **αφηρημένη κλάση**. Λειτουργεί ως διεπαφή, μέσω της οποίας μια κλάση μπορεί να έχει πρόσβαση σε διάφορες λειτουργίες. Για να γίνει αυτό, όμως, πρέπει πρώτα να τις υλοποιήσει. Οι διεπαφές περιέχουν μόνο σταθερές και αφηρημένες μεθόδους. Η σύνταξή τους έχει την εξής μορφή:

```java
interface {
	abstract methods
}
```

Θα δούμε ένα απλό παράδειγμα για να δείξουμε πώς λειτουργούν οι διεπαφές:

```java
interface Pizza {
	public void ingredientsList();
	public void preparation();
}
class Mushroom implements Pizza {
	public void ingredientsList() {
		System.out.println("mushrooms, tomato sauce, oregano, mozzarella");
}
public void preparation() {
	System.out.println("The pizza will be ready in 15 minutes.");
}
}
class Main {
	public static void main(String[] args) {
		Mushroom myMushroom = new Mushroom();
		myMushroom.ingredientsList();
		myMushroom.preparation();
	}
}
```

Η αντίστοιχη έξοδος από την εντολή Java `System.out.println` έχει την εξής μορφή:

```java
mushrooms, tomato sauce, oregano, mozzarella
The pizza will be ready in 15 minutes.
```

### Αντικείμενα

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

```java
public class Main {
	int a = 10;
public static void main(String[] args) {
	Main myObj1 = new Main();
	Main myObj2 = new Main();
	System.out.println(myObj1.a);
	System.out.println(myObj2.a);
	}
}
```

Το αποτέλεσμα έχει την εξής μορφή:

```java
10
10
```

### Enums

[Οι Enums](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/java-enums/) είναι μια ειδική κλάση που σας επιτρέπει να ενσωματώσετε **αμετάβλητες σταθερές στον κώδικά σας**. Σε αυτές τις μεταβλητές αποδίδονται σταθερές τιμές που δεν μπορούν να αλλάξουν. Αυτός ο τύπος δεδομένων είναι ιδιαίτερα χρήσιμος αν χρειάζεστε μεταβλητές που πρέπει να έχουν μόνο λίγες πιθανές καταστάσεις. Η σύνταξη ενός enum έχει την εξής μορφή:

```java
enum NameOfTheClass {
	VALUE1,
	VALUE2,
	VALUE3
}
```


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/typoi-dedomenon-java/](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/typoi-dedomenon-java/) for AI/LLM consumption.