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

时间:2021-08-19 19:48:28
Date date = null;

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

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

Why?

9 个解决方案

#1


因为用空(null)去调用属性或方法。
null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常
java中声明但未初始化的对象可以使用?

#2


要调用java对象的方法,确保此对象的实例不为空,不然就报空指针异常。

#3


首先String的+号是重载的运算符,
其实质是:
* <p>
 * The Java language provides special support for the string
 * concatenation operator (&nbsp;+&nbsp;), 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异常。

和你直接用+的结果一致

#4


可以定义但是不能使用。

#5


看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();
    }

#6


引用 5 楼 ticmy 的回复:
看println的实现吧:
Java code?123456    public void println(Object x) {    synchronized (this) {        print(x);        newLine();    }    }

Java code?123    public void print(Object obj) ……



无视吧,没看到还有“+”操作

#7


引用 1 楼 zhaokuo719 的回复:
因为用空(null)去调用属性或方法。
null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常

同意2楼!

#8


引用 楼主 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() 如何调用对象的方法?

#9


我知道toString() 方法是Date公开的方法。 

date=null,怎么理解? 比如在堆栈分配上 .  Date date=null 表示未初始化date?
另一个问题是, System.out.println("Date=" + null); 中 "Date=" + null怎么理解?

#1


因为用空(null)去调用属性或方法。
null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常
java中声明但未初始化的对象可以使用?

#2


要调用java对象的方法,确保此对象的实例不为空,不然就报空指针异常。

#3


首先String的+号是重载的运算符,
其实质是:
* <p>
 * The Java language provides special support for the string
 * concatenation operator (&nbsp;+&nbsp;), 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异常。

和你直接用+的结果一致

#4


可以定义但是不能使用。

#5


看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();
    }

#6


引用 5 楼 ticmy 的回复:
看println的实现吧:
Java code?123456    public void println(Object x) {    synchronized (this) {        print(x);        newLine();    }    }

Java code?123    public void print(Object obj) ……



无视吧,没看到还有“+”操作

#7


引用 1 楼 zhaokuo719 的回复:
因为用空(null)去调用属性或方法。
null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常

同意2楼!

#8


引用 楼主 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() 如何调用对象的方法?

#9


我知道toString() 方法是Date公开的方法。 

date=null,怎么理解? 比如在堆栈分配上 .  Date date=null 表示未初始化date?
另一个问题是, System.out.println("Date=" + null); 中 "Date=" + null怎么理解?