Java での変数のキャスト

Mohammad Irfan 2023年10月12日
  1. Java での暗黙的なキャスト
  2. Java での明示的なキャスト
  3. Java で CastException を回避する
Java での変数のキャスト

このチュートリアルでは、Java で変数をキャストする方法、または変数を別の型に変換する方法を紹介します。

キャストは、プログラミング言語で 1つの値/変数を別のタイプにキャスト/変換するために使用されます。Java は、intfloatdoubleboolean などの豊富なデータ型のセットをサポートしており、コードの記述中に変数をキャストする必要がある場合があります。

Java は、暗黙的キャストと明示的キャストの 2 種類のキャストをサポートしています。intlong または double にキャストする場合、longdoubleint よりも多くのバイトを使用するため、Java は暗黙的にこれを行い、その逆を行います(つまり、double をに変換します) int)の場合、整数容量が原因でデータが失われる可能性があります。

したがって、Java では、下位から上位のデータ型への暗黙的なキャストが可能ですが、上位から下位のタイプへの明示的なキャストが可能です。いくつかの例で理解しましょう。

Java での暗黙的なキャスト

ここで、この例では、intfloat 型にキャストし、暗黙的にキャストします。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 では明示的なキャストが必要になります。

たとえば、floatint にキャストすると、小数点以下の値が切り捨てられます。そのため、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

関連記事 - Java Casting