Sobes.tech
Intern

Ποια είναι η διαφορά μεταξύ των primitive και των αναφορικών τύπων δεδομένων;

sobes.tech AI

Απάντηση από AI

Οι πρωταρχικοί τύποι αποθηκεύουν άμεσα την τιμή, ενώ οι τύποι αναφοράς αποθηκεύουν μια αναφορά (διεύθυνση στη μνήμη) στο αντικείμενο που περιέχει την τιμή.

Πρωταρχικοί τύποι:

  • Καταλαμβάνουν σταθερό και μικρό όγκο μνήμης.
  • Μεταδίδονται με τιμή (αντιγράφεται η ίδια η τιμή).
  • Ξεκινούν με μικρό γράμμα.
  • Περιλαμβάνουν: byte, short, int, long, float, double, boolean, char.
// Παράδειγμα πρωταρχικού τύπου
int a = 10;
int b = a; // Αντιγράφεται η τιμή 10
b = 20;   // Μόνο το b αλλάζει, το a παραμένει 10

Τύποι αναφοράς:

  • Καταλαμβάνουν διαφορετικό όγκο μνήμης, ανάλογα με το περιεχόμενο του αντικειμένου.
  • Μεταδίδονται με αναφορά (αντιγραφή της διεύθυνσης του αντικειμένου). Οι αλλαγές στο αντικείμενο μέσω της αναφοράς επηρεάζουν όλες τις μεταβλητές που αναφέρονται σε αυτό.
  • Συνήθως ξεκινούν με κεφαλαίο γράμμα (κλάσεις).
  • Περιλαμβάνουν: κλάσεις (String, Object, προσαρμοσμένες κλάσεις), διεπαφές, πίνακες.
// Παράδειγμα τύπου αναφοράς
String str1 = new String("Hello");
String str2 = str1; // Αντιγράφεται η αναφορά στο αντικείμενο "Hello"
str2 = "World";   // Το str2 τώρα αναφέρεται σε ένα νέο αντικείμενο "World". Το str1 εξακολουθεί να αναφέρεται στο "Hello".

// Άλλο παράδειγμα με μεταβλητό αντικείμενο
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Αντιγράφεται η αναφορά στο ίδιο αντικείμενο ArrayList
list2.add(2); // Προσθέτουμε ένα στοιχείο στο αντικείμενο που προσπελάζεται και από τις δύο αναφορές
// Τώρα, το list1 περιέχει [1, 2] και το list2 περιέχει [1, 2]

Γρήγορος πίνακας σύγκρισης:

Ιδιότητα Πρωταρχικοί τύποι Τύποι αναφοράς
Αποθήκευση Τιμή Αναφορά σε αντικείμενο
Μεταβίβαση Με τιμή Με αναφορά
Μέγεθος μνήμης Σταθερό και μικρό Μεταβλητό
Ξεκινά με μικρό γράμμα Ναι Συνήθως με κεφαλαίο
Nullability Δεν μπορούν να είναι null Μπορούν να είναι null

Οι πρωταρχικοί τύποι περικλείονται σε αντίστοιχες κλάσεις-περιτυλίγματα (wrapper classes) για να μπορούν να λειτουργούν ως αντικείμενα (π.χ., int σε Integer).