型キャスト
変数のデータ型を変換する – 型キャスト- (type)var
- type:データ型
- var:変数名
データ型を変換することを型キャストと言います。
まず、基本型では、小さな型を大きな型に代入(たとえば、int型の値をlong型に代入)することは可能です。大は小を兼ねるのです。これを拡大変換と言います。
しかし、その逆(縮小変換)はそのままでは不可です。long型の値がint型に格納できるとは限らないからです。
そこで、明示的にlong型の値をint型にキャスト(変換)する必要があります。キャストには、対象の変数の直前に「(型名)」を付与するだけです。
Cast.java
package com.example.mynavi.basic; public class Cast { public static void main(String[] args) { long l = 50; int i = (int)l; System.out.println(1+i); } }
同じく、クラス型/インターフェイス型の値もキャストできます。クラス型/インターフェイス型がキャストできるのは、代入する型が代入先の型の派生型、または実装型でなければなりません。たとえば、HamsterクラスがAnimalクラスaのサブクラスであれば、以下のようなキャストが可能です。
Animal a = new Hamster(); Hamster h = (Hamster)a;
ただし、以下のようなコードは不可です。
Animal c = new Cat(); Hamster h = (Hamster)c; // キャストエラー
変数cはAnimal型ですが、その実体はCatオブジェクトであるからです。
このようなエラーを防ぐためには、instanceof演算子を利用してください。instanceof演算子は、オブジェクトが指定されたクラス、またはスーパークラスのインスタンスであるかを判定します。クラス型のキャストにあたっては、あらかじめinstanceof演算子で実際の型を判定しておくことで、安全にキャストを実行できます。
Animal c = new Cat(); if (c instanceof Hamster) { Hamster h = (Hamster)c; }