Cos'è il casting dei tipi in Java?
Un tipo di dati è un insieme predefinito di valori che specificano il tipo di valori che possono essere memorizzati al suo interno insieme all'operazione che può essere eseguita su di essi.Perché è richiesto il cast del tipo?
Java ha diversi tipi di dati primitivi che richiedono spazi diversi in memoria. Ciò può causare problemi di compatibilità durante l'assegnazione di un valore di un tipo di dati a un altro. Se i tipi di dati sono già compatibili, il typecasting viene eseguito automaticamente dal compilatore. Pertanto, il typecasting risolve un grave problema di compatibilità quando si ha a che fare con diversi tipi di dati nel nostro programma.Tipi di casting di tipi Java
Esistono due tipi di casting di tipo in Java.- Casting del tipo ampliato : noto anche come cast del tipo implicito o automatico
- Casting di tipo restringente : noto anche come cast di tipo esplicito o manuale
Fusione di tipo allargato
L'ampliamento del typecasting, come suggerisce il nome, si riferisce all'ampliamento di un tipo di dati più piccolo in un tipo di dati più grande. Eseguiamo questo typecasting quando vogliamo convertire un tipo piccolo in un tipo grande. I tipi di dati devono essere compatibili tra loro. Non esiste alcuna conversione implicita dal tipo numeric al tipo char o booleano. In Java, i tipi char e boolean non sono compatibili.
byte -> breve -> carattere -> int -> lungo -> float -> double
Questo tipo di casting viene eseguito automaticamente dal compilatore senza alcuna perdita di informazioni. Non richiede alcun trigger esterno da parte del programmatore.
Esempio
//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);
}
}
Produzione
valore int: 100 valore da int a long: 100 valore da int a float: 100.0 valore byte: da 1 byte a valore int: 1 carattere valore: da un carattere a valore int: 97
Spiegazione
Nel codice sopra, abbiamo mostrato l'ampliamento del typecasting che viene eseguito automaticamente dal compilatore. Prima di tutto, abbiamo assegnato valori a int , byte e char . Abbiamo quindi assegnato i valori int a long e float , entrambi maggiori di int . Abbiamo anche assegnato i valori byte e char a int . Sia byte che char sono tipi di dati più piccoli rispetto a int , pertanto queste conversioni erano implicite.Colata di tipo restringente
Il restringimento del typecasting, come suggerisce il nome, si riferisce al restringimento di un tipo di dati più grande in un tipo di dati più piccolo. Eseguiamo questo typecasting quando vogliamo convertire un tipo grande in un tipo piccolo.
double -> float -> long -> int -> char -> short -> byte
Per questo tipo di casting, sovrascriviamo la conversione predefinita di Java specificando la nostra conversione. Per raggiungere questo obiettivo, scriviamo la variabile o il valore che deve essere convertito in tipografia preceduto dal tipo di dati di destinazione tra parentesi '()'. Tuttavia questo tipo di fusione può comportare una possibile perdita di precisione.
Esempio
//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);
}
}
Produzione
valore double: 97.04 valore long: 97 valore int: 97 valore char: a
GO TO FULL VERSION