Java dla Testerów 13. Typy referencyjne

Typy referencyjne różnią się od typów prymitywnych i te różnice na początku mogą sprawiać problemy. Głównie dlatego, że zachowanie, które Ci dzisiaj pokażę, nie jest intuicyjne. W tym filmie napiszemy sobie kilka testów, w których będziemy badać jak zachowują się typy prymitywne, gdy przypisujemy im wartość  innej zmiennej oraz jak to działa w typach referencyjnych. Pokażę Ci także na czym polega pewna cecha klasy String, nazywana niezmiennością.

Zmienne, które możemy określić mianem typów wartościowych, to takie, które przechowują wartość bezpośrednio. Takie typy były poruszone w pierwszej lekcji dotyczącej typów prostych. Jest to na przykład typ int reprezentujący liczby całkowite. Typy referencyjne z kolei nie przechowują wartości bezpośrednio, a jedynie przechowują informację o adresie, coś w rodzaju wskaźnika, np. do obiektu klasy. Klasa jest właśnie przykładem typu referencyjnego.

String jest specyficzną klasą, bo w naszym teście stringi będą się zachowywały trochę jak typy wartościowe (proste) właśnie. Cechuje ją niezmienność, czyli raz utworzony obiekt typu String, już nie zmieni swojej wartości. Dlatego też, gdy próbujemy zmienić wartość stringa, zostanie stworzony nowy obiekt, a referencja zostanie zmodyfikowana. Jeżeli chcesz dowiedzieć się więcej o niezmienności typu string, polecam Ci ten krótki artykuł ze StormIT (po polsku).

Przy okazji tej lekcji zobaczysz też prostą asercję. Korzystam z JUnita 5, który jest frameworkiem do testów jednostkowych i to właśnie z tą biblioteką dostarczane są metody do asercji, których używam. Więcej o tym czym są asercje oraz czy poszczególne frameworki do testów jednostkowych się bardzo różnią między sobą znajdziesz w moim wpisie na ten temat.