【Java】キャストについて

2018年3月11日

本稿はキャストについて説明します。

キャストとは特定の型を別の型に変換できる機能です。

ただし、キャストできないパターンも当然あります。

安全なキャストは暗黙的に行えますが危険なキャストは明示的に指定しなければなりません。

基本型同士のキャスト

boolean型以外は基本的にキャストが可能です。

ただし、キャストにより正確なデータが維持できなくなる可能性がある場合は明示的にキャストしてあげる必要があります。

public class Test {
	public static void main(String[] args){
		short s = 200;
		int i = s;//キャストは不要。
		
		int i2 = 100;
		char s2 = (char)i2;//キャストが必要。
	}
}

文字型であるcharも数値データで保持しているため、int型などからキャスト可能です。

基本型と参照型のキャスト(オートボクシング)

基本型にはラッパークラスという基本型と関係の深いクラスがそれぞれ用意されています。

そのクラスへのキャストであれば暗黙的にキャストされます。

この暗黙キャストをオートボクシングといいます。

基本型とラッパークラスの一覧です。

基本型 ラッパークラス(参照型)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

また、基本型からObject型への代入はオートボクシングが機能して可能になります。

public class Test {
	public static void main(String[] args){
		int i = 100;
		Integer num = i;
		int reverse = num;
		Object obj = reverse;
		System.out.println(obj);
	}
}
実行結果

100

参照型同士のキャスト

参照型同士のキャストはクラスの親子関係によってキャストできるかが決まります。

親クラスへのキャストは安全であるため、暗黙的にキャストできます。

親クラスから子クラスへのキャストは危険なキャストなので明示的なキャストが必要になります。

public class Test {
	public static void main(String[] args){
		Comic comic = new Comic();
		Book book = comic;//キャスト不要
		Comic castComic = (Comic)book;//明示キャストが必要
	}
}
class Book{
}
class Comic extends Book{
}

Java

Posted by nompor