Czym jest Java Type Casting
Type Casting w języku Java odnosi się do zmiany typu zmiennej z jednego typu na inny. W Javie, casting może być automatyczny (implicit) lub wymuszony (explicit). Automatyczne rzutowanie zachodzi, gdy konwersja jest bezpieczna i nie wymaga dodatkowej interwencji programisty. Wymuszone rzutowanie jest wymagane, gdy konwersja może potencjalnie prowadzić do utraty danych lub gdy konwersja nie jest bezpośrednio wspierana przez język.
Automatyczne (Niejawne) Rzutowanie
Automatyczne rzutowanie zachodzi w sytuacjach, gdy typ źródłowy ma mniejszy zakres niż typ docelowy. Przykłady typów prostych:
- z byte do short, int, long, float, lub double
- z short do int, long, float, lub double
- z char do int, long, float, lub double
- z int do long, float, lub double
- z long do float lub double
- z float do double
public class Main {
public static void main(String[] args) {
int myInt = 9;
double myDouble = myInt; // Automatyczne rzutowanie: int na double
System.out.println(myInt); // Wyświetla 9
System.out.println(myDouble); // Wyświetla 9.0
}
}
public class Main {
public static void main(String[] args) {
double myDouble = 9.78;
int myInt = (int) myDouble; // Wymuszone rzutowanie: double na int
System.out.println(myDouble); // Wyświetla 9.78
System.out.println(myInt); // Wyświetla 9
}
}
Rzutowanie w Obiektach
W Javie, rzutowanie może być również stosowane do obiektów. Dzieje się tak w przypadku rzutowania między klasami, które mają wspólną hierarchię dziedziczenia.
- Rzutowanie w górę (upcasting): jest to automatyczne i bezpieczne. Polega na rzutowaniu od klasy potomnej do klasy bazowej.
- Rzutowanie w dół (downcasting): wymaga jawnej konwersji i może prowadzić do błędów w runtime, jeśli obiekt nie jest instancją danej klasy.
Przykład Rzutowania Obiektów:
class Zwierze {}
class Pies extends Zwierze {}
public class Main {
public static void main(String[] args) {
Zwierze zwierze = new Pies(); // Automatyczne rzutowanie w górę
// Wymuszone rzutowanie w dół
if (zwierze instanceof Pies) {
Pies pies = (Pies) zwierze;
System.out.println("Rzutowanie zakończone sukcesem.");
}
}
}
Wymuszone rzutowanie w dół powinno być zawsze poprzedzone sprawdzeniem za pomocą operatora instanceof
, aby uniknąć błędów w runtime.