Java の型キャストとは何ですか?
データ型は、データ型 に格納できる値のタイプと、その値に対して実行できる操作を指定する、事前定義された値のセットです。なぜ型キャストが必要なのでしょうか?
Java には、メモリ内に異なるスペースを必要とするさまざまなプリミティブ データ型があります。これにより、あるデータ型の値を別のデータ型に割り当てるときに互換性の問題が発生する可能性があります。データ型にすでに互換性がある場合、型キャストはコンパイラによって自動的に行われます。したがって、型キャストは、プログラム内でさまざまなデータ型を扱う際の互換性に関する主要な問題を解決します。Java の型キャストの種類
Java には 2 種類の型キャストがあります。- 拡張型キャスト— 暗黙的または自動型キャストとも呼ばれます
- ナローイング型キャスト— 明示的または手動型キャストとも呼ばれます
拡幅型鋳物
拡張型キャストは、その名前が示すように、より小さなデータ型をより大きなデータ型に拡張することを指します。この型キャストは、小さい型を大きい型に変換するときに実行します。データ型は相互に互換性がある必要があります。数値から文字型またはブール型への暗黙的な変換はありません。Java では、char 型と boolean 型には互換性がありません。
byte -> short -> char -> int -> long -> float -> double
このタイプのキャストは、情報を失うことなくコンパイラによって自動的に行われます。プログラマによる外部トリガーは必要ありません。
例
//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);
}
}
出力
int 値: 100 int から long 値へ: 100 int から float 値: 100.0 バイト値: 1 バイトから int 値へ: 1 char 値: char から int 値へ: 97
説明
上記のコードでは、コンパイラによって自動的に行われる拡張型キャストを示しました。まず、int、byte、およびcharに値を割り当てました。次に、 int 値をlongとfloatに割り当てました。どちらもintより大きくなります。また、byte値とchar値をintに割り当てました。byteとchar はどちらもintよりも小さいデータ型であるため、これらの変換は暗黙的でした。絞り型鋳物
名前が示すように、型キャストの絞り込みは、より大きなデータ型をより小さなデータ型に絞り込むことを指します。この型キャストは、大きな型を小さな型に変換するときに実行します。
double -> float -> long -> int -> char -> short -> byte
このタイプのキャストでは、独自の変換を指定することで Java のデフォルト変換をオーバーライドします。これを実現するには、型キャストする必要がある変数または値を、括弧「()」内にターゲット データ型の前に書きます。ただし、このタイプの鋳造では精度が失われる可能性があります。
例
//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);
}
}
出力
double 値: 97.04 long 値: 97 int 値: 97 char 値: a
GO TO FULL VERSION