CodeGym /Blog Java /Random-PL /Rzutowanie typu Java
John Squirrels
Poziom 41
San Francisco

Rzutowanie typu Java

Opublikowano w grupie Random-PL

Co to jest rzutowanie typów w Javie?

Typ danych to predefiniowany zbiór wartości, który określa typ wartości, jakie można w nim przechowywać, wraz z operacjami, jakie można na nich przeprowadzić.
Casting typów Java to proces, podczas którego jeden typ danych jest konwertowany na inny.
Może być zarówno ukryte , jak i jawne . Niejawne rzutowanie, znane również jako automatyczne rzutowanie, jest wykonywane przez kompilator. Jawne rzutowanie typów jest wykonywane ręcznie przez programistę w kodzie.

Dlaczego wymagane jest rzutowanie typu?

Java ma różne prymitywne typy danych, które wymagają różnych miejsc w pamięci. Może to powodować problemy ze zgodnością podczas przypisywania wartości jednego typu danych do innego. Jeśli typy danych są już kompatybilne, rzutowanie typów jest wykonywane automatycznie przez kompilator. Zatem rzutowanie na typy rozwiązuje poważny problem kompatybilności, gdy mamy do czynienia z różnymi typami danych w naszym programie.

Rodzaje rzutowania typów Java

W Javie istnieją dwa typy rzutowania typów.
  1. Rozszerzające rzutowanie typów — znane również jako niejawne lub automatyczne rzutowanie typów
  2. Casting typu zwężającego — znany również jako rzutowanie typu jawnego lub ręcznego

Odlew typu poszerzającego

Rozszerzanie typowania, jak sama nazwa wskazuje, odnosi się do poszerzania mniejszego typu danych na większy typ danych. Wykonujemy to rzutowanie, gdy chcemy przekonwertować małą czcionkę na dużą czcionkę. Typy danych muszą być ze sobą kompatybilne. Nie ma ukrytej konwersji z typu numerycznego na typ char lub boolean. W Javie typy char i boolean są niekompatybilne.
bajt -> krótki -> znak -> int -> długi -> float -> double
Ten typ rzutowania jest wykonywany automatycznie przez kompilator bez utraty informacji. Nie wymaga żadnego zewnętrznego wyzwalacza przez programistę.

Przykład


//Automatic type conversion
public class WideningExample {
   public static void main(String[] args) {

       int i = 100;
       System.out.println("int value: " + i);

       // int to long type
       long l = i;
       System.out.println("int to long value: " + l);

       // long to float type
       float f = l;
       System.out.println("int to float value: " + f);


       byte b = 1;
       System.out.println("byte value: " + b);

       // byte to int type
       i = b;
       System.out.println("byte to int value: " + i);

       char c = 'a';
       System.out.println("char value: " + c);

       // char to int type
       i = c;

       // prints the ASCII value of the given character
       // ASCII value of 'a' = 97
       System.out.println("char to int value: " + i);
   }
}

Wyjście

wartość int: 100 wartość int do wartości długiej: 100 wartość int do wartości zmiennoprzecinkowej: 100,0 bajt wartość: 1 bajt do wartości int: 1 wartość char: znak do wartości int: 97

Wyjaśnienie

W powyższym kodzie pokazaliśmy rozszerzające rzutowanie tekstu, które kompilator wykonuje automatycznie. Przede wszystkim przypisaliśmy wartości int , byte i char . Następnie przypisaliśmy wartości int elementom long i float , które są większe niż int . Przypisaliśmy także wartości byte i char do int . Zarówno byte, jak i char są mniejszymi typami danych niż int , dlatego te konwersje były ukryte.

Odlewanie typu zwężającego

Zawężanie typografii, jak sama nazwa wskazuje, odnosi się do zawężania większego typu danych do mniejszego typu danych. Wykonujemy to rzutowanie, gdy chcemy przekonwertować dużą czcionkę na małą czcionkę.
double -> float -> long -> int -> char -> short -> byte
W przypadku tego typu rzutowania zastępujemy domyślną konwersję Java, określając własną konwersję. Aby to osiągnąć, piszemy zmienną lub wartość, która ma zostać rzutowana, poprzedzoną docelowym typem danych w nawiasach „()”. Jednakże ten rodzaj odlewania może skutkować możliwą utratą precyzji.

Przykład


//Manual Type Conversion
public class NarrowingExample {
   public static void main(String[] arg) {

       // double data type
       double d = 97.04;
       // Print statements
       System.out.println("double value: " + d);

       // Narrowing type casting from double to long
       // implicitly writing the target data type in () followed by initial data type
       long l = (long) d;

       // fractional part lost - loss of precision
       System.out.println("long value: " + l);

       // Narrowing type casting from double to int
       // implicitly writing the target data type in () followed by initial data type
       int i = (int) l;

       // fractional part lost - loss of precision
       System.out.println("int value: " + i);

       // Narrowing type casting from double to int
       // implicitly writing the target data type in () followed by initial data type
       char c = (char) i;

       // displaying character corresponding to the ASCII value of 100
       System.out.println("char value: " + c);
   }
}

Wyjście

wartość podwójna: 97,04 wartość długa: 97 wartość int: 97 wartość char: a

Wyjaśnienie

Zawężanie rzutowania musi zostać wykonane jawnie przez programistę przy użyciu standardowej składni. W powyższym programie zaczęliśmy od wartości double , która jest większa niż typy danych long i int . Przekształciliśmy ten typ double na long i int , używając nawiasów z żądanymi docelowymi typami danych. Dokonaliśmy również ręcznego rzutowania „int” na „char”.

Wniosek

Mamy nadzieję, że do końca tego wpisu szczegółowo zapoznałeś się z rzutowaniem typów Java. Poznałeś dwa typy rzutowania tekstu w Javie. Nauczyłeś się także, jak ręcznie rzutować niezgodne typy danych, korzystając z rzutowania zawężającego. Możesz samodzielnie wypróbować inne kombinacje typów danych z różnymi wartościami, aby lepiej je zrozumieć. Ćwicz dalej, aby lepiej opanować tę koncepcję. Do tego czasu rozwijaj się i lśnij!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION