Integer を渡したときのオーバーロード
出力はどれか。
public class Main {
static void f(long x) { System.out.println("long"); }
static void f(Object x) { System.out.println("Object"); }
public static void main(String[] args) {
Integer i = 5;
f(i);
}
}
- A
Object - B
long - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: まずボクシング・アンボクシングなしで探し、Integer → Object (参照型の拡大) で見つかります。
- B: long を使うにはアンボクシングが必要なので、後回しになります。
- C: 呼べるメソッドが決まるのでコンパイルできます。
- D: オーバーロードの選択はコンパイル時に決まります。
ポイント
- まず「ボクシング・アンボクシングなし」で探します。Integer → Object は参照型の拡大なので、この段階で見つかります。
- long を使うにはアンボクシングが必要なので後回しです。