Intern
Jaka jest różnica między typami danych prostymi a referencyjnymi?
sobes.tech AI
Odpowiedź od AI
Typy podstawowe przechowują wartość bezpośrednio, podczas gdy typy referencyjne przechowują odwołanie (adres w pamięci) do obiektu zawierającego wartość.
Typy podstawowe:
- Zajmują stały i mały rozmiar pamięci.
- Są przekazywane przez wartość (kopiuje się samą wartość).
- Zaczynają się od małej litery.
- Obejmują:
byte,short,int,long,float,double,boolean,char.
// Przykład typu podstawowego
int a = 10;
int b = a; // Kopiuje wartość 10
b = 20; // Zmienia się tylko b, a pozostaje 10
Typy referencyjne:
- Zajmują różne ilości pamięci, w zależności od zawartości obiektu.
- Są przekazywane przez referencję (kopiuje się adres obiektu). Zmiana obiektu przez referencję wpływa na wszystkie zmienne, które na niego wskazują.
- Zazwyczaj zaczynają się od wielkiej litery (klasy).
- Obejmują: klasy (
String,Object, klasy użytkownika), interfejsy, tablice.
// Przykład typu referencyjnego
String str1 = new String("Hello");
String str2 = str1; // Kopiuje referencję do obiektu "Hello"
str2 = "World"; // str2 teraz wskazuje na nowy obiekt "World". str1 nadal wskazuje na "Hello".
// Inny przykład z obiektem mutowalnym
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Kopiuje referencję do tego samego obiektu ArrayList
list2.add(2); // Dodaje element do obiektu dostępnego przez obie referencje
// Teraz list1 zawiera [1, 2], a list2 zawiera [1, 2]
Szybka tabela porównawcza:
| Właściwość | Typy podstawowe | Typy referencyjne |
|---|---|---|
| Przechowywanie | Wartość | Referencja do obiektu |
| Przekazywanie | Przez wartość | Przez referencję |
| Rozmiar pamięci | Stały i mały | Zmienny |
| Zaczyna się od | Małej litery | Zwykle od wielkiej |
| Nullowalność | Nie mogą być null |
Mogą być null |
Typy podstawowe są opakowywane w klasy wrapper (np. int w Integer), aby można było nimi operować jako na obiektach.