public class test {
public static void main(String[] args) throws Exception {
Temp temp = new Temp();
temp.test("1");
temp.test(null);
}
}
public class Temp {
public void test(Object a){
System.out.println("test Object");
}
public void test(String a){
System.out.println("test string");
}
}
为什么输出结果为
test Object
test Object
输出结果是
test string
test string
null就是代表空对象,在内存中没有占用空间,只占了一个引用空间。
只针对你写的测试例子来将,你的例子更应该是一个overload重载的测试用例。
简单说下重载:jdk重载编译期间就决定了代码的走向,而编译时判断依据就是根据方法中参数类型,以及方法调用者传入的参数,将前者最大程度(Class继承结构)匹配后者的方法,作为编译结果。运行时也将使用次方法。
回到你的问题上,null既然是空对象,那么既可以作为Object (如Object o = null;编译通过),也可以作为String (如String s = null;编译通过)。java.lang.String也是继承的Object类。所以最大程度匹配后,编译器决定执行public void test(String a)方法。
综上,代码test(null)的运行结果为:test string
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。