java中声明但未初始化的对象可以使用?

布谷歌 2013-02-19 11:09:03
Date date = null;

System.out.println("Date=" + date);
执行如上java代码,结果为:Date=null

System.out.println("Date=" + date .toString());
执行如上java代码,报异常:java.lang.NullPointerException

Why?
...全文
693 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
布谷歌 2013-02-20
  • 打赏
  • 举报
回复
我知道toString() 方法是Date公开的方法。 date=null,怎么理解? 比如在堆栈分配上 . Date date=null 表示未初始化date? 另一个问题是, System.out.println("Date=" + null); 中 "Date=" + null怎么理解?
kskbbq 2013-02-19
  • 打赏
  • 举报
回复
引用 楼主 gzyes 的回复:
Date date = null; System.out.println("Date=" + date); 执行如上java代码,结果为:Date=null System.out.println("Date=" + date .toString()); 执行如上java代码,报异常:java.lang.NullPointerException Why……
楼主不太理解 Date date=null 和Date date=new Date()的区别 Date date只是表示一个Date类型的引用变量 =null时 没有指向堆里面的Date() 如何调用对象的方法?
赏金--猎人 2013-02-19
  • 打赏
  • 举报
回复
引用 1 楼 zhaokuo719 的回复:
因为用空(null)去调用属性或方法。 null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常
同意2楼!
龙四 2013-02-19
  • 打赏
  • 举报
回复
引用 5 楼 ticmy 的回复:
看println的实现吧: Java code?123456 public void println(Object x) { synchronized (this) { print(x); newLine(); } } Java code?123 public void print(Object obj) ……
无视吧,没看到还有“+”操作
龙四 2013-02-19
  • 打赏
  • 举报
回复
看println的实现吧:

    public void println(Object x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    public void print(Object obj) {
	write(String.valueOf(obj));
    }

    public static String valueOf(Object obj) {
	return (obj == null) ? "null" : obj.toString();
    }
  • 打赏
  • 举报
回复
可以定义但是不能使用。
silenceburn 2013-02-19
  • 打赏
  • 举报
回复
首先String的+号是重载的运算符, 其实质是:
* <p>
 * The Java language provides special support for the string
 * concatenation operator ( + ), and for conversion of
 * other objects to strings. String concatenation is implemented
 * through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
 * class and its <code>append</code> method.
然后你的问题就很容易理解了,
package A;

public class NullTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO XWu Auto-generated method stub
        StringBuilder sb = new StringBuilder("");
        sb.append((Object)null);  //1
        //sb.append(((Object)null).toString()); //2
        System.out.println(sb);
        
    }

}
第一个append当然是可以执行的 第二个append是nullpoint异常。 和你直接用+的结果一致
lvzg_005 2013-02-19
  • 打赏
  • 举报
回复
要调用java对象的方法,确保此对象的实例不为空,不然就报空指针异常。
趙大叔 2013-02-19
  • 打赏
  • 举报
回复
因为用空(null)去调用属性或方法。 null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧