为什么原始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
输出背后的逻辑是什么?
答案 0 :(得分:1)
原始值将自动装箱到其对象表示形式,因此1将变为Integer
。但是您没有Integer
的重载方法,因此它将与Object
匹配,因为Integer
是Object
,而不是String
。 / p>
另一方面,
null
情况则更有趣。 null
可以是任何类型的对象,因此在这种情况下,最窄的类型是String
。这就是为什么它匹配String
而不是Object
的原因。
如果添加另一个方法getName(Integer i)
,则出于相同原因,编译器在调用Amgibigous method call
时将引发s.getName(null)
错误-null
可以都是String
和Integer
答案 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的原因。