byte を渡したときに選ばれるメソッド
出力はどれか。
public class Main {
static void m(int x) { System.out.println("int"); }
static void m(long x) { System.out.println("long"); }
static void m(Integer x) { System.out.println("Integer"); }
public static void main(String[] args) {
byte b = 1;
m(b);
}
}
- A
int - B
long - C
Integer - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: byte に完全一致するメソッドは無いので、拡大変換で一番近い int が選ばれます。
- B: long も拡大変換で呼べますが、より近い int が優先されます。
- C: ボクシング (Integer) は拡大変換より後に検討されます。
- D: 呼べるメソッドがあるのでコンパイルできます。
ポイント
- オーバーロードは「完全一致 → 拡大変換 → ボクシング → 可変長引数」の順に探されます。
- byte の完全一致は無いので、拡大変換で一番近い int が選ばれます。