首頁  >  問答  >  主體

java new对象 User user; 和 User user = null; 有什么区别

User user;

User user = null;
这两种写法有什么区别呢?

PHP中文网PHP中文网2741 天前709

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:34:27

    這需要看 User user;出現在哪裡,先放結論:

    1. 如果是物件的屬性(field),則兩種寫法沒有區別。

    2. 如果是方法中的局部變量,若方法中沒有其他地方對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
    

    回覆
    0
  • 阿神

    阿神2017-04-18 10:34:27

    如果user是局部變數: 在第一次賦值 (包括初始化為null) 之前使用user是編譯錯誤

    賦值後沒區別

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:34:27

    好像是一樣的

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:34:27

    沒有差別 , 預設的初始化值為null

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:34:27

    沒有= 在棧裡面沒有開空間給他。 加上=null 就在堆疊裡面給他指定了一個空的佔位符

    回覆
    0
  • 取消回覆