Использование null в перегруженных методах в Java [duplicate]

Возможный дубликат:

Перегрузка метода для параметра NULL

Следующий код компилируется и работает нормально.

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

В этом коде вызывается метод, который принимает параметр типаString

документы сказать.

Если более одного метода-члена доступны и применимы к вызову метода, необходимо выбрать один, чтобы предоставить дескриптор для отправки метода во время выполнения. Язык программирования Java использует правило, согласно которому выбирается наиболее конкретный метод.

но я нене понимаю, когда один из методов в коде, который принимает параметр примитиваint модифицируется, чтобы принять параметр типа оболочкиInteger такие как,

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

выдается ошибка времени компиляции.

ссылка на temp неоднозначна, оба метода temp (java.lang.String) в метадоверсии загрузки pkg.Main и метод temp (java.lang.Integer) в метадоверсии загрузки pkg.Main совпадают

В этом конкретном сценарии, почему допустимо перегрузить метод с примитивным типом данных, который, однако, не 'Похоже, дело в соответствующем типе оболочки?

Ответы на вопрос(3)

Ваш ответ на вопрос