Sobes.tech
Junior

Czym jest rzutowanie (casting) w Java?

sobes.tech AI

Odpowiedź od AI

Rzutowanie typów (casting) w Javie to konwersja wartości jednego typu danych na inny typ danych.

Rodzaje rzutowania:

  • Jawne (Explicit Casting): Wykonywane przez programistę za pomocą operatora (typ). Używane do konwersji z "większego" typu na "mniejszy" (np. z double na int). Może prowadzić do utraty danych.
    // rzutowanie automatyczne (implicit)
    int a = 10;
    double b = a; // int na double
    
    // rzutowanie jawne (explicit)
    double c = 10.5;
    int d = (int) c; // double na int, d będzie równe 10
    
  • Rzutowanie implicit (Implicit Casting / Widening Conversion): Wykonywane automatycznie przez JVM, gdy konwertujemy z "mniejszego" typu na "większy" (np. z int na double). Jest bezpieczne i nie powoduje utraty danych.
    int x = 10;
    double y = x; // int automatycznie konwertowane na double
    

Rzutowanie typów może zachodzić między typami prymitywnymi lub między typami obiektów w hierarchii dziedziczenia.

Przy rzutowaniu obiektów:

  • Upcasting: Konwersja podklasy do jej nadklasy. Jest to implicitne i bezpieczne.
    class Animal {}
    class Dog extends Animal {}
    
    Animal animal = new Dog(); // Upcasting
    
  • Downcasting: Konwersja nadklasy do jej podklasy. Wymaga jawnego rzutowania i może wywołać ClassCastException podczas działania, jeśli obiekt nie jest faktycznie instancją docelowej podklasy.
    Animal animal = new Dog(); // Upcasting
    
    // Downcasting - wymaga jawnego rzutowania i sprawdzenia instanceof
    if (animal instanceof Dog) {
        Dog dog = (Dog) animal;
        // Teraz można używać metod specyficznych dla Dog
    }