Sobes.tech
Intern

Milline on erinevus primitiivsete ja viidatavate andmetüüpide vahel?

sobes.tech AI

Vastus AI-lt

Primitiivsed tüübid salvestavad väärtust otse, samas viidetüübid — viidet (mälu aadressi) objekti, mis sisaldab väärtust.

Primitiivsed tüübid:

  • võtavad fikseeritud ja väikese mäluhulga.
  • edastatakse väärtuse järgi (kopeeritakse ise väärtus).
  • algavad väikese tähega.
  • hõlmavad: byte, short, int, long, float, double, boolean, char.
// Näide primitiivse tüübiga
int a = 10;
int b = a; // Kopeeritakse väärtus 10
b = 20;   // muudetakse ainult b, a jääb 10

Viidetüübid:

  • võtavad erineva mäluhulga, sõltuvalt objekti sisust.
  • edastatakse viitega (kopeeritakse objekti aadress). Objekti muutmine viitega mõjutab kõiki sellele viitavaid muutujaid.
  • tavaliselt algavad suure tähega (klassid).
  • hõlmavad: klassid (String, Object, kasutajaklassid), liidesed, massiivid.
// Näide viidetüübiga
String str1 = new String("Hello");
String str2 = str1; // Kopeeritakse viide objekti "Hello"
str2 = "World";   // str2 nüüd viitab uuele objektile "World". str1 ikka viitab "Hello".

// Teine näide muudetava objektiga
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Kopeeritakse viide samale ArrayList-ile
list2.add(2); // Lisame elemendi objekti, millele viitab mõlemad viited
// Nüüd sisaldab list1 [1, 2] ja list2 [1, 2]

Lühike võrdlustabel:

Omadus Primitiivsed tüübid Viidetüübid
Salvestamine Väärtus Objektile viit
Edastamine Väärtuse järgi Viite järgi
Mälu suurus Fikseeritud Muutuv
Algab Väikese tähega Tavaliselt suure tähega
Nullability Ei saa olla null Võib olla null

Primitiivsed tüübid on ümbritsetud vastavate klasside (wrapper classes), et nendega saaks töötada nagu objektidega (näiteks int muutmine Integer-ks).