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ć.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.- Rozszerzające rzutowanie typów — znane również jako niejawne lub automatyczne rzutowanie typów
- 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
GO TO FULL VERSION