Sobes.tech
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.