Перегрузка метода для нулевого аргумента, передавая 0 и ноль - PullRequest
0 голосов
/ 18 декабря 2018

Я видел вопросы о переполнении стека о перегрузке метода для нулевого аргумента, но не решил мою путаницу, и я попробовал что-то другое, что не обсуждалось в ответах, поэтому задаю этот вопрос.

Мне нужна причина, когда я передаю "null", он выполняет функцию с типом аргумента double, а когда я передаю "0" или любую другую цифровую цифру, такую ​​как 1,2,10 и т. Д., В функцию, которую он выполняетфункция с типом аргумента "Объект".Я знаю, что есть разница в NULL и 0 здесь разница.

Спасибо!

Код:

public class NullArgumentOverloading {

    public static void main(String[] args) {

        NullArgumentOverloading obj = new NullArgumentOverloading();
        obj.overLoad(null); // prints "Double array argument method."
        obj.overLoad(0); // prints "Object o argument method."
    }

    private void overLoad(Object o) {
        System.out.println("Object o argument method.");
    }

    private void overLoad(double[] dArray) {
        System.out.println("Double array argument method.");
    }
}

1 Ответ

0 голосов
/ 18 декабря 2018

Java всегда будет пытаться использовать наиболее конкретную версию метода, которая доступна (см. JLS 15.12.2 ).

Object, double[] могут принимать как ноль какдействительное значение.Поэтому оба подходят.

Object - это супер-тип double[] и поэтому более конкретен, чем просто Object.Так вот почему он печатает «Метод аргумента двойного массива».когда вы передаете null в функцию

Для другого Вопрос: Как уже объяснялось в комментариях, когда вы передаете 0, который является примитивом int, он будет автоматически помещен в Integer* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * 10 * 10 *.

...