このコードを見てください:
public class Test {
public static void main(String... args) {
flipFlop("hello", new Integer(4), 2004);
// flipFlop("hello", 10, 2004); // this works!
}
private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + " (String, int, Integer)");
}
private static void flipFlop(String str, int i, int j) {
System.out.println(str + " (String, int, int)");
}
}
コンパイラは、呼び出しがあいまいであるというエラーを返します。
説明 リソース パス 場所 タイプ メソッド FlipFlop(String, int, Integer) は、タイプ Test に対してあいまいです Test Test.java scjp19 - inheritence/src 行 3 Java 問題
ただし、コメントアウトされた行がフリップフロップを呼び出すために使用されている場合、メソッドは明確に呼び出されます (2 つ目は、プリミティブ自体を使用した後にオートボクシングが行われるためです)。
2 番目の引数がいずれかの方法でボックス化解除されることをコンパイラが確認し、3 番目の引数に応じてどのメソッドを呼び出す必要があるかを判断することを期待します。なぜこれが起こらないのですか?根拠は何ですか?