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).