работа null в Java
Расскажите почему при вызове строчки m(null); в консоль выводится "String", получается null является string - объектом ?
public class Main {
static void m( Object i) {System.out.print("Object"); }
static void m (String i) {System.out.print("String"); }
public static void main(String[] args) {
Object i = null;
m(i);
m(null);
}}
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Выражение null имеет тип интерфейса javax.lang.model.type.NullType. Этот тип расширяет ReferenceType и может быть использовать для любых ссылок. При выборе перегруженной функции компилятор отдает предпочтение варианту, использующему наиболее частный тип. А так как String является подтипом Object, то тут вызывается вариант функции, принимающий ссылку на String.
Можно привести пример посложнее. Здесь Number будет предпочтительней Object, а Integer предпочтительей Number:
public class HelloWorld
{
public static void test(Object str)
{
System.out.println("Object");
}
public static void test(Number str)
{
System.out.println("Number");
}
public static void test(Integer str)
{
System.out.println("Integer");
}
public static void main(String []args)
{
test(null);
}
}