暗黙型変換の適用条件
以下のプログラムの出力結果がどうなるか、自信を持って答えられませんでした。
public class Test { static void print(short n) { System.out.println("short"); } static void print(int n) { System.out.println("int"); } static void print(float n) { System.out.println("float"); } static void print(double n) { System.out.println("double"); } public static void main(String[] args) { byte b = 0; print(b); char c = 'a'; print(c); long l = 0l; print(l); } }
この辺は基本中の基本なのに、今まで理解が適当だったなーと反省。確認してみたところ、暗黙の型変換は次のルールに従うことが分かりました。
- byte
- short
- (char)
- int
- long
- float
- double
- 番号の小さい型から大きい型に向かって、暗黙型変換が有効。ただし、charへの変換は不可。
- 番号の大きい型から小さい型へは明示的なキャストが必要。
- 変換の適用優先順位は、番号の順番に従う。例えば、byte→intよりもbyte→shortが優先される。
よって、冒頭のプログラムの出力結果は
short int float
となります。