暗黙型変換の適用条件

以下のプログラムの出力結果がどうなるか、自信を持って答えられませんでした。

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);
    }
}

この辺は基本中の基本なのに、今まで理解が適当だったなーと反省。確認してみたところ、暗黙の型変換は次のルールに従うことが分かりました。

  1. byte
  2. short
  3. (char)
  4. int
  5. long
  6. float
  7. double
  • 番号の小さい型から大きい型に向かって、暗黙型変換が有効。ただし、charへの変換は不可。
  • 番号の大きい型から小さい型へは明示的なキャストが必要。
  • 変換の適用優先順位は、番号の順番に従う。例えば、byte→intよりもbyte→shortが優先される。

よって、冒頭のプログラムの出力結果は

short
int
float

となります。