User user;
和
User user = null;
这两种写法有什么区别呢?
PHP中文网2017-04-18 10:34:27
這需要看 User user;
出現在哪裡,先放結論:
如果是物件的屬性(field),則兩種寫法沒有區別。
如果是方法中的局部變量,若方法中沒有其他地方對user賦值,則編譯錯誤。
如果是物件的屬性,那麼在編譯的時候,java編譯器會自動為field賦初值(原始型別為預設值;參考型別為null)。例如下面的程式碼:
public class TestInitialization {
private User userA;
}
編譯後,使用javap查看字節碼,紅色部分為編譯器自動賦初值的過程:
如果是方法中的局部變量,編譯器不會自動賦初值。 User user;
只是定义的变量user,但并未给user在内存中分配空间,没有初始化,无法通过编译;User user = null;
只是定義的變數user,但並未給user在記憶體中分配空間,沒有初始化,無法通過編譯;User user = null;
不僅定義了變數user,也為user分配了記憶體空間,user現在指向null。
那么问题来了`null`又是个什么鬼?
http://stackoverflow.com/questions/2707322/what-is-null-in-java