1. 程式人生 > >Java物件宣告時:new與null的區別

Java物件宣告時:new與null的區別

作者:林子云
連結:https://www.zhihu.com/question/21468505/answer/18333632
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

首先要明白,java裡物件傳遞的時候,傳遞的都是引用(也就是物件的地址),這比傳遞整個物件高效的多。而基礎型別,int,double等傳遞的才是值。
比如,(new ArrayList<String>).add(new String("hello")),jvm只是把new String("hello")的地址存入到了列表list裡面。String str = new String("Test"),是開闢記憶體放入了物件,並把它的引用賦給str。

同理,BookInfo bookinfo=null與BookInfo bookinfo=new BookInfo():前者,是聲明瞭一個物件(的引用),jvm並沒有開闢記憶體放入一個物件;而後者,在聲明瞭一個物件的引用後,又把新開闢的沒有儲存任何有效值的物件的地址賦給了他。bookinfo=test.getinfo(),又把它指向了另一個地址 = = 也就是說原來開闢的記憶體並沒有用,那就沒有意義。但是java虛擬機器自動垃圾回收機制會判斷並回收記憶體的。。不用想太多。
你完全可以寫成:
ArrayList<BookInfo> InfoList=new ArrayList<BookInfo>();
BookInfo bookinfo=infoList.getInfo()。

綜上:如果你的類在建立後,要自己讀寫資料,那就必須初始化;如果像Bookinfo那樣,完全是為了從其他地方接收引用,也完全可以省了new吧。

 

如果是在類的成員變數中,BookInfo bookinfo;和BookInfo bookinfo=null;是一樣的效果;因為該類在初始化時成員變數也會做初始化,預設就是null;而方法內的變數則不會初始化;

而如果是在方法的成員變數,則必須初始化,也就是=null或者new,因為為了保證java的安全性;