– A teraz ta najbardziej interesująca część. Opowiem Ci o konwersji typu. Typów zmiennych nie można zmieniać, ale istnieje sposób, dzięki któremu możesz je konwertować. Ten sposób nazywa się operacją przypisania.

– Możesz przypisywać zmienne różnych typów do siebie nawzajem. W ten sposób wartość jednej zmiennej (jakiegoś konkretnego typu) zostaje przekonwertowana na wartość innego typu i przypisana do innej zmiennej.

– Możemy wyszczególnić dwa rodzaje konwersji: konwersja rozszerzająca typów prostych i konwersja zawężająca typów prostych. Rozszerzanie jest jak przenoszenie rzeczy z małego koszyka do dużego. To niczym niewyróżniająca się i bezbolesna procedura. Zawężanie jest czynnością analogiczną do wyjmowania rzeczy z dużego kosza i przenoszenia ich do mniejszego. Kiedy to robisz, może zabraknąć Ci miejsca; być może trzeba będzie coś wyrzucić.

– Oto typy posortowane zgodnie z rozmiarem ich „kosza”:

Konwersja typu - 1

– Musisz pamiętać o kilku rzeczach:

1. Kosz na typy char jest tego samego rozmiaru co na typy short, ale nie można swobodnie przenosić rzeczy z jednego do drugiego kosza. Kiedy przenosisz wartości z short do char, wartości mniejsze niż 0 zawsze zostaną utracone. Kiedy przenosisz wartości z char do short, utracone zostaną wartości większe niż 32000.

2. Kiedy zamieniasz liczby całkowite na zmiennoprzecinkowe, to wyrzucone mogą zostać z liczby cyfry najmniej istotne. Można to jednak zaakceptować, ponieważ celem liczby zmiennoprzecinkowej jest przechowywanie tylko przybliżonej wartości.

– Podczas przeprowadzania konwersji zawężającej musimy wyraźnie wskazać kompilatorowi, że nie popełniliśmy błędu i odrzucamy część liczby celowo. Aby to zrobić, używamy operatora rzutowania (tj. nazwy typu w nawiasach).

– Zmienne różnych typów należy przypisywać w następujący sposób:

Kod Java Opis
byte a = 115;
int b = a;
Konwersja rozszerzająca typów prostych. Wszystko się zgadza.
int c = 10000;
byte d = (byte) c;
Konwersja zawężająca typów prostych. Musimy wyraźnie zaznaczyć, że dodatkowe bajty muszą zostać odrzucone.
int c = 10;
byte d = (byte) c;
Konwersja zawężająca typów prostych. Musimy wyraźnie zaznaczyć, że dodatkowe bajty muszą zostać odrzucone, nawet jeśli są one równe 0.
float f = 10000;
long l = (long) (f * f);
float f2 = l;
long l2 = (long) f2;
Podczas przypisywania do typu float zachodzi rozszerzająca konwersja typów prostych. Podczas przypisywania float do typu long zachodzi zawężająca konwersja typów prostych. Wymagany jest operator rzutowania.
double d = 1;
float f = (float) d;
long l = (long) f;
int i = (int) l;
short s = (short) i;
byte b = (byte) s;
We wszystkich operacjach przypisania oprócz pierwszej linii zachodzi konwersja zawężająca. Ta konwersja wymaga, żebyśmy dokładnie wskazali konkretną konwersję typu.

– Operator rzutowania musi zostać postawiony przed liczbą/zmienną za każdym razem, gdy ma zostać odrzucona część liczby lub kiedy zachodzi konwersja zawężająca typów prostych. Operator rzutowania oddziałuje tylko na liczbę/zmienną, która następuje po nim.

Kod Java Opis
float f = 10000;
long l = (long) f * f;
Tylko jedna bądź dwie zmienne są rzutowane do typu long: mnożenie typu long przez float jest równe float.
float f = 10000;
long l = (long) (f * f);
Całe wyrażenie jest rzutowane do typu long.

– Rozumiem.