具有null的Java重载示例

时间:2019-07-18 17:43:26

标签: java overloading

为什么原始1被认为是对象,而null则被认为是String

public class Sample7 {

    public void getName(String s) {
        System.out.println(s + "string");
    }

    public void getName(Object o) {
        System.out.println(o + "object");
    }
}

class Test {
    public static void main(String args[]) {
        Sample7 s = new Sample7();
        s.getName(null);
        s.getName(1);
    }
} 

输出:

nullstring

1object

输出背后的逻辑是什么?

2 个答案:

答案 0 :(得分:1)

原始值将自动装箱到其对象表示形式,因此1将变为Integer。但是您没有Integer的重载方法,因此它将与Object匹配,因为IntegerObject,而不是String。 / p> 另一方面,

null情况则更有趣。 null可以是任何类型的对象,因此在这种情况下,最窄的类型是String。这就是为什么它匹配String而不是Object的原因。

如果添加另一个方法getName(Integer i),则出于相同原因,编译器在调用Amgibigous method call时将引发s.getName(null)错误-null可以都是StringInteger

答案 1 :(得分:0)

为什么将null视为字符串:

Java中的任何变量/值都可以为空,这就是为什么您将nullstring传递给String的原因。

为什么原始1被认为是对象

getName(String s)因为您的方法没有接受整数的显式签名,所以Java中的所有值都是Object的实例,这就是为什么getName(int)映射到getName(Object)的原因。 1是一个对象。 Java对声明为Object的基本类型[String,int,double,float,boolean]进行隐式类型转换。这就是为什么您获得值1的原因。