1. 程式人生 > >Java中宣告一個物件並賦值NULL或者只宣告不賦值

Java中宣告一個物件並賦值NULL或者只宣告不賦值

其實這個問題可以當成宣告變數要不要賦初始值的問題,不管這個變數是基礎型別還是引用型別,只是基礎型別不能賦值NULL。

這裡要分兩種清況,成員變數或者區域性變數。給一個程式碼:

class People{
    private String name;
    private int age;

    String getName() {
        return name;
    }
    int getAge() {
        return age;
    }
}
public class Demo {
    public static void main(String[] as){
        People p;
         int a;
        p = new People();
//        t1= null;
//        a=1;
        System.out.println(p.getName());
        System.out.println(p.getAge());
//        System.out.println(a);
    }
}

如果是成員變數,比如People類的name或者age欄位,不手動賦初始值的時候Java會給個預設值,和變數的型別對應,string是引用型別,打印出來name是null,age是0。這個時候變數初始值給不給null或者0是一樣的。

如果是區域性變數,比如在主方法中,宣告一個物件p和一個整形a,如果只宣告的話,使用時會報錯,也就是區域性變數在使用之前必須要手動初始化賦值,Java不會給預設值,當然也可以不在宣告的時候賦值,可以在後邊使用之前賦值就行。

這裡可能要注意引用型別變數,比如程式碼中的p物件,宣告時不賦值和給個null是不一樣的,賦值null也相當於完成了初始化賦值,這個時候可以呼叫方法,但必然會報空指標異常。如果只想提前宣告一下,後邊程式碼會進行賦值的話,那宣告的時候就不必要給個null了。

總之,一個區域性物件使用之前肯定要先賦值,但不管你在什麼時候賦值。

所以,無論是成員變數還是區域性變數,宣告的時候不賦值只聲明當然是可以的。

=null和不賦值在記憶體上的區別可以看看這個:https://bbs.csdn.net/topics/380085577?list=lz