zhulingyue77 2013-09-12 14:17 采纳率: 100%
浏览 2318
已采纳

JAVA 中Null值到底是什么

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

  • 写回答

2条回答 默认 最新

  • 马欢欢 2013-09-14 08:20
    关注

    输出结果是
    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

    对重载想要有更深的理解,推荐你查看http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2.10

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路