我有以下两个对象变量
Date a;
Date b=null;
绝对“ a”和“ b”都没有引用任何对象。
现在,如果我调用以下语句
System.out.println(a.toString());
会有编译时错误,但是如果我调用以下语句
System.out.println(b.toString());
不会有编译时错误,但会存在运行时错误。这是什么原因,什么值将实际存储在“ b”中以表示空值?
2
在SO上被多次问及回答:为什么局部变量未在Java中初始化?,Java中的未初始化变量和成员以及与此相关的许多问题
—
gnat 2014年
@gnat,还有其他问题要解决“未初始化”和“空”之间的区别吗?仅仅因为答案相似,并不意味着这是一个重复的问题。
—
DougM 2014年
@DougM当然,您读过我提到的第一个问题吗?“是否有任何理由使Java设计人员感到不应为局部变量赋予默认值?认真地说,如果可以为实例变量赋予缺省值,那为什么我们不能对局部变量做同样的事情呢?” (FWIW它不能在技术上是重复的,只是因为这是在另一个站点)
—
蚊蚋
这没有解决“未初始化”和“初始化为null”之间的区别,只是“为什么变量不会自动初始化为null?” 同一主题,问题略有不同。
—
DougM 2014年
@DougM这是在局部变量初始化null与未初始化之间的区别中
—
蚊蚋