Usando nulo en métodos sobrecargados en Java [duplicado]

Posible duplicado:
Método de sobrecarga para el parámetro NULL

El siguiente código compila y va bien.

public class Main
{
    public void temp(Object o)
    {
        System.out.println("The method with the receiving parameter of type Object has been invoked.");
    }

    public void temp(String s)
    {
        System.out.println("The method with the receiving parameter of type String has been invoked.");
    }

    public void temp(int i)
    {
        System.out.println("The method with the receiving parameter of type int has been invoked.");
    }

    public static void main(String[] args)
    {
        Main main=new Main();
        main.temp(null);
    }
}

En este código, el método a invocar es el que acepta el parámetro de tipoString

losdocs decir.

Si más de un método miembro es accesible y aplicable a una invocación de método, es necesario elegir uno para proporcionar el descriptor para el envío del método en tiempo de ejecución. El lenguaje de programación Java usa la regla de que se elige el método más específico.

pero no entiendo cuando uno de los métodos en el código que acepta el parámetro de la primitivaint Se modifica para aceptar el parámetro del tipo wrapper.Integer como,

public void temp(Integer i)
{
    System.out.println("The method with the receiving parameter of type Integer has been invoked.");
}

se emite un error en tiempo de compilación.

la referencia a la temperatura es ambigua, tanto el método temp (java.lang.String) en methodoverloadingpkg.Main como el método temp (java.lang.Integer) en methodoverloadingpkg.Main coinciden

En este escenario particular, ¿por qué es legal sobrecargar un método con un tipo de datos primitivo que, sin embargo, no parece ser el caso con su tipo de contenedor correspondiente?

Respuestas a la pregunta(3)

Su respuesta a la pregunta