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.
Il Java Type Casting è un processo mediante il quale un tipo di dati viene convertito in un altro.
Può essere sia implicito che esplicito . Il typecasting implicito, noto anche come typecasting automatico, viene eseguito dal compilatore. Il typecasting esplicito viene eseguito manualmente dal programmatore nel codice.

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.
  1. Casting del tipo ampliato : noto anche come cast del tipo implicito o automatico
  2. 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

Spiegazione

Il restringimento del typecasting deve essere eseguito esplicitamente dal programmatore utilizzando una sintassi standard. Nel programma sopra, abbiamo iniziato con un valore double che è maggiore dei tipi di dati long e int . Abbiamo convertito questo double in long e int utilizzando parentesi con i tipi di dati di destinazione desiderati. Abbiamo anche convertito manualmente "int" in "char".

Conclusione

Entro la fine di questo post, speriamo che tu abbia familiarizzato in dettaglio con Java Type Casting. Hai imparato i due tipi di typecasting in Java. Hai anche imparato come eseguire manualmente il cast dei tipi di dati non compatibili utilizzando il typecasting Narrowing. Puoi provare tu stesso altre combinazioni di tipi di dati con valori diversi per capirlo in modo più approfondito. Continua a esercitarti per una padronanza più profonda del concetto. Fino ad allora, continua a crescere e a brillare!