Rozdział 4. Converting and Casting

Konwersja typów prostych:
  1. boolean nie może być rzutowany na inny typ.
  2. typ mniejszy może być niejawnie rzutowany na typ większy, np. pod zmienną double podstawiamy zmienna int.
  3. typ większy nie może być niejawnie rzutowany na typ mniejszy, np. double na int.
Legalne przypisanie: ((char)||(byte->short))->int->long->float->double
W Javie zmienne liczbowe są explicite tylko int albo double (float f = 1.234; // błąd kompilacji). Ale przypisanie liczby całkowitej do byte, short albo char nie powoduje błędu.
Przy przekazywaniu parametrów do wywołania metody następuje promocja argumentu. Jeśli typ wymagany jest mniejszy - błąd kompilacji.

Przy rzutowanie na typ większy (numeryczny) nie traci się wartości.

Promocja w przypadku działań:
1. Operatory unarne:
a) Jeżeli operand jest byte, short lub char, a operator to nie ++ ani --, to następuje promocja do int.
b) wpp nic się nie dzieje.
2. Operatory binarne (2 argumentowe)
a) Jeżeli jeden z operandów jest double, drugi konwertowany jest do double.
b) Jeśli jeden z opeandów to float, drugi konwersja do float.
c) long, long...
d) wpp oba do int.

Aby zawęzić wartość zmiennej, należy zastosować explicite cast. Nie można rzutować boolean na nic, ani nic na boolean.

Konwersja referencji:
  1. Konwersji podlegają referencje na obiekty, interfejsy i tablice.
  2. Interfejs może ulec konwersji na interfejs lub klasę. Jeśli jest to interfejs, to musi być to interfejs bazowy danego interfejsu.
  3. Klasa może ulec konwersji na klasę oraz interfejs. Klasa musi być klasą bazową, a interfejs musi być implementowany.
  4. Tablica może uleca konwersji na klasę Object, interfejs Cloneable lub Serializable, lub na tsblicę. Tylko konwersja tablicy zawierającej referencje do obiektów, na inną tablicę, gdzie typy obu obiektów moża konwertować, jest dozwolone.
Wszystko można przypisać do Object, nawet tablice.

TODO: Tabelka na stronie 148.

Nie można rzutować klasy finalnej na interfejs, ale każdą inną można - nie ma błędu kompilacji, lecz będzie Exception podczas runtime.

Brak komentarzy:

Prześlij komentarz