Java での変数のキャスト
 
このチュートリアルでは、Java で変数をキャストする方法、または変数を別の型に変換する方法を紹介します。
キャストは、プログラミング言語で 1つの値/変数を別のタイプにキャスト/変換するために使用されます。Java は、int、float、double、boolean などの豊富なデータ型のセットをサポートしており、コードの記述中に変数をキャストする必要がある場合があります。
Java は、暗黙的キャストと明示的キャストの 2 種類のキャストをサポートしています。int を long または double にキャストする場合、long と double は int よりも多くのバイトを使用するため、Java は暗黙的にこれを行い、その逆を行います(つまり、double をに変換します) int)の場合、整数容量が原因でデータが失われる可能性があります。
したがって、Java では、下位から上位のデータ型への暗黙的なキャストが可能ですが、上位から下位のタイプへの明示的なキャストが可能です。いくつかの例で理解しましょう。
Java での暗黙的なキャスト
ここで、この例では、int を float 型にキャストし、暗黙的にキャストします。Java では多くのコードがなくても暗黙的なキャストが可能であるため、このコードは正常に機能します。
public class SimpleTesting {
  public static void main(String[] args) {
    int a = 23;
    System.out.println("int " + a);
    // int to float - implicit casting
    float f = a;
    System.out.println("float " + f);
  }
}
出力:
int 23
float 23.0
Java での明示的なキャスト
場合によっては、データが失われるため、Java では明示的なキャストが必要になります。
たとえば、float を int にキャストすると、小数点以下の値が切り捨てられます。そのため、Java はこれを暗黙的に行わず、コンパイル時エラーをスローします。以下の例を参照してください。
public class SimpleTesting {
  public static void main(String[] args) {
    float a = 23;
    System.out.println("float " + a);
    // float to int - explicit casting
    int f = a;
    System.out.println("int " + f);
  }
}
出力:
Type mismatch: cannot convert from float to int
このコンパイル時エラーは、このデータ損失を回避するためのプログラマーへの警告です。それでもプログラマーがキャストしたい場合、Java では、型名を関数の括弧で囲むキャスト演算子を使用できます。
このコンパイラはコードをコンパイルして実行しますが、値が切り捨てられていることを確認します。以下の例を参照してください。
public class SimpleTesting {
  public static void main(String[] args) {
    float a = 23.5f;
    System.out.println("float " + a);
    // float to int - explicit casting
    int f = (int) a;
    System.out.println("int " + f);
  }
}
出力:
float 23.50
int 23
cast() メソッドを使用して、オブジェクト値をプリミティブ値に変換することもできます。以下の例を参照してください。
public class SimpleTesting {
  public static void main(String[] args) {
    Integer a = 23;
    System.out.println("integer " + a);
    // float to int - explicit casting
    int i = (Integer.class.cast(a));
    System.out.println("int " + i);
  }
}
出力:
integer 23
int 23
Java で CastException を回避する
Java オブジェクトのキャストも、キャストする前に適切なクラス型を必要とする主要な懸念事項です。たとえば、double を使用して float 型をキャストすると、Java はこれを許可せず、コンソールに ClassCastException をスローします。
以下の例を参照してください。
public class SimpleTesting {
  public static void main(String[] args) {
    Number num = new Float(15.5);
    System.out.println(num);
    Double d = (Double) num;
    System.out.println(d);
  }
}
出力:
15.5
Exception in thread "main" java.lang.ClassCastException