Java中宣告一個物件並賦值NULL或者只宣告不賦值
阿新 • • 發佈:2018-11-27
其實這個問題可以當成宣告變數要不要賦初始值的問題,不管這個變數是基礎型別還是引用型別,只是基礎型別不能賦值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